java的readObject方法可以连续从一个文件中读取多个对象吗????

 我来答
mq612
推荐于2017-09-09 · TA获得超过281个赞
知道小有建树答主
回答量:104
采纳率:0%
帮助的人:166万
展开全部
readObject返回值为Object对象,从表面看我们只能读取一个序列化对象,但是数组也是Object对象,所以我们可以把序列化对象数组读取出来(List等集合框架也是好的选择),这样就可以实现读取多个对象。

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;

public class Test {

public Test() {
// 创建序列化的对象数组
MyData [] myDatas = new MyData[10];
// 通过循环构造每一个对象
for(int i = 0; i < myDatas.length; i++){
myDatas[i] = new MyData("数据:" + (i + 1));
}
// 对象将要保存的文件
File file = new File("C:/mydata.dat");
// 对象输出流
ObjectOutputStream out = null;
// 对象输入流
ObjectInputStream in = null;
try {
// 将数组对象写入文件
out = new ObjectOutputStream(new FileOutputStream(file));
out.writeObject(myDatas);
out.flush();
out.close();

// 将数组对象从文件中读取
in = new ObjectInputStream(new FileInputStream(file));
MyData [] datas = (MyData[]) in.readObject();
for (MyData myData : datas) {
System.out.println(myData);
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}

public static void main(String[] args) {
new Test();
}

}

/**
* 序列化数据
*/
class MyData implements Serializable {
private String text = null;

public MyData(String text) {
this.text = text;
}

public String toString() {
return text;
}

public String getText() {
return text;
}

public void setText(String text) {
this.text = text;
}

}
更多追问追答
追问
抱歉还是没明白。。。能不能具体说明一下怎么从文件中读出多个对象,然后一个个放到数组中,并且判断文件末尾?用null 作为判断总是只能读出一个对象
追答
读取多个对象和读取一个对象的方法相同,你存入文件的就是一个序列化数组,所以读出的对象可以直接转型为对象数组,不用一个个放倒数组中,也不用判断文件结尾。
TableDI
2024-07-18 广告
当我们谈到Python与Excel的拆分时,通常指的是使用Python的库来读取Excel文件中的数据,然后根据某种逻辑(如按行、按列、按特定值等)将数据拆分成多个部分或输出到新的Excel文件中。上海悉息信息科技有限公司在处理这类任务时,... 点击进入详情页
本回答由TableDI提供
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式