当前位置: 代码迷 >> J2SE >> 关于流的IO错误
  详细解决方案

关于流的IO错误

热度:8   发布时间:2016-04-24 12:57:45.0
关于流的IO异常
字节数组流因为是指向内存,所以不发生IO异常,但当内存不足的时候(虽然这种可能性极小),会不会发生异常。另外,想确切的知道一下,字符数组流的读操作会发生IO异常是不是因为有可能只读到单个字节从而产生乱码。

------解决方案--------------------
内存不足的时候,还真不清楚,
只要是读字节还是字符,都会有异常吧,但应该不是乱码的问题,如果乱码,也可以读出来啊。。
------解决方案--------------------
引用楼主 xx21546544 的帖子:
字节数组流因为是指向内存,所以不发生IO异常,但当内存不足的时候(虽然这种可能性极小),会不会发生异常。另外,想确切的知道一下,字符数组流的读操作会发生IO异常是不是因为有可能只读到单个字节从而产生乱码。

------解决方案--------------------
我觉得内存不足 在J2ME中 都是手机内存都爆了,程序就会crash,所以觉得是先检测到内存异常弹出吧

符数组流的读操作会发生IO异常,我觉得可以看看JDK的代码,字符数组流的IO操作都扔出了一个IO异常,所以读的时候需要捕获


------解决方案--------------------
内存不足的时候java会OutOfMemoryError,注意,这是一个Error,
所以当内存不足的时候,字节数组流不发生IO异常(因为异常developer可以捕获并处理)


字符数组流的读操作会发生IO异常有很多种原因:例如大小,或者不可读(security控制)等等原因,总之异常就是不应该的操作(似乎是废话)。至于你所说的“因为有可能只读到单个字节从而产生乱码”似乎jvm没这么聪明,
------解决方案--------------------
如lyerliu所贴的源码,两种类的内部实现方式不太一样,CharArrayReader类在读取前都调用了ensureOpen()方法,该方法的源码如下:

/** Check to make sure that the stream has not been closed */
private void ensureOpen() throws IOException {
if (buf == null)
throw new IOException("Stream closed");
}

该方法会检查流是否关闭,如果关闭就抛出IO异常.
CharArrayReader类的关闭流方法源码如下:
/**
* Close the stream.
*/
public void close() {
buf = null;
}
------解决方案--------------------
一般网络出现状况会发生IO异常
不过如果真的产生异常
那LZ所说的可能产生乱码应该有可能
就算不产生乱码应该也没什么意义
毕竟数据没有传输完整
  相关解决方案