如题
解决方案 »
- jdk1.5新特征java注释(Annotations)的应用问题
- 我抛出什么错误呢?? 有没有 方法,让Java自己识别是什么错误?
- 谁有关于元旦的flash简单的作品 flash大侠请进
- Eclipse 3.4 安装 SWT Desinger 6.7.0 谁有
- 有关GridBagLayout的设计实例!!??????
- 快速学好JAVA要看什么书?
- 怎么下载API
- 幫我看一下这个程序, java 调用sqlserver存储过程,那里出错了.
- 我的程序编译拉!为什么窗口不能出现啊
- 问一下函数接受参数的问题,下面哪一个可以接受任何类型的参数??
- java如何处理关闭文件问题?
- 一道JAVA游戏算法题
ObjectInputStream ois = null;
try {
FileInputStream fis=new FileInputStream(loginFilename);
ois=new ObjectInputStream(fis);
while(ois.available()!=-1){//这里如何判断是否已经读到结尾?
logins.add((LogRecord)ois.readObject());
}
} catch (FileNotFoundException e) {
e.printStackTrace();
throw new InitException("采集属性文件没有设置");
}catch (Exception e) {
e.printStackTrace();
throw new InitException("采集属性文件读取错误");
}
return logins;
}在判断的地方改成ois.read()!=-1结果仍然后抛出EOF异常!!
如果是本地文件流,那么这个函数返回的是这个流可以读多少字节,而不是判断available()是不是返回-1.
如果你嫌一个字节一个字节读得太慢,那你用bufferedIutputStream封装一下就好。
若文件中有若于个int的数,你用DataInputStream中的readint()去读,何时判读到结尾?
绝对既不是-1,也不是什么null
同样道理:若文件中有若于个Object对象,你用ObjectInputStream中的readObject()去读,何时判读到结尾?
绝对既不是-1,也不是什么null方法之一:(常用的方法)将若干个对象(数量不定)都装入一个容器中(如:ArrayList之类),然后将容器这一个对象写入就行了。读取时,只要读取一个对象(即容器对象)就行了。方法之二:(若不想用容器),则由于数量不定,正是用EOFException来判断结束。代码结构如下:(无论是readInt()读int,还是readObject()读对象)
try{
while(true)
{
Object o=ois.radObject();
处理已读出的对象o;
}
}catch(EOFxception e){
//已从流中读完。
}
finallly{
流的关闭。
}以上仅供楼主参考
如果返回值是int(比如read()方法),那么-1代表读取到末尾
原文(Jet Mah中文版jdk)为:
“如果因为该流在文件未尾而无字节可用,则返回 -1 值;”如果返回值是一个对象(比如readObject()方法),那么没有比较统一的处理,参考具体文档吧╮( ̄▽ ̄)╭
ObjectInputStream同样有继承自超类的read()方法,-1代表读取到末尾或者无数据可用(^╴^A;)
就是这样了。PS:楼主我教你怎么贴代码:
1、将代码作良好的格式化,以方便阅读。
2、在发帖文本框的上方单击字体颜色右边的按钮,选择 Java
3、将代码粘贴到【code=Java】和【/code】之间。就会得到下面的效果:public class Hello { public static void main(String[] args) {
System.out.println("Hello!");
}
}
try{
while(true)
{
Object o=ois.radObject();
处理已读出的对象o;
}
}catch(EOFxception e){
//已从流中读完。
}
finallly{
流的关闭。
}在楼上的基础上,我加入第三种方法:那就是在文件的前面先存入一个数字len,表示后面有多少个对象,在每次写入之后,更改这个数字len;每次读时,先用读出这个数字后len,再用ObjectOuputStream读出下面所有的对象,如下:
……
for(int i=0;i<len;i++){
Object o=ois.radObject();
处理已读出的对象o;
}
……