【问题标题】:How to read different Object using ObjectInputStream in Java如何在 Java 中使用 ObjectInputStream 读取不同的对象
【发布时间】:2016-01-13 18:18:25
【问题描述】:

注意:不是重复的,因为这里我们不仅要写对象,还要写整个文件,然后再读回来。

我使用 ObjectOutputStream 创建了一个带有 3 个对象的 File

  1. String
  2. String
  3. File(大小在 [1 到 1.5]GB 之间)

以下是我用来编写File的代码

byte[] BUFFER = new byte[1024*32];
FileInputStream fis = new FileInputStream("ThisIsTheFile.xyz");
FileOutputStream fos = new FileOutputStream("abcd.dat", true);
ObjectOutputStream oos = new ObjectOutputStream(fos);      

String fileId = "BSN-1516-5287B-65893", fTitle = "Emberson Booklet";      

for(int i = 0; i < 3; i++){      
    if(i == 0){      
        oos.write(fileId.getBytes(), 0, fileId.length());
    }else if (i == 1){
        oos.write(fTitle.getBytes(), 0, fTitle.length());
    }else{
        InputStream is = new BufferedInputStream(fis);
        int bytesRead = -1;
        while((bytesRead = is.read(BUFFER)) != -1){
            oos.write(BUFFER, 0, bytesRead);
        }
        is.close();
    }
}

fileId = fTitle = null;

oos.flush();
oos.close();
fos.flush();
fos.close();
fis.close();

现在我的问题是:

  1. 我不想中断 Java Heap Space,所以同时使用 32KB 字节缓冲区技术读取和写入大型 File 流。
  2. 我是否将这三个 Object 分别正确地写在一个文件中?
  3. 最后但并非最不重要的一点,我应该如何从"abcd.dat" File 中检索上述所有 3 个ObjectObjectInputStream

请帮忙。

【问题讨论】:

    标签: java fileinputstream fileoutputstream objectinputstream objectoutputstream


    【解决方案1】:

    我创建了一个包含 3 个单个对象的文件

    没有。您已经创建了一个包含 no 对象和大量字节的文件,并且无法判断一个字节序列在哪里停止而另一个字节序列在哪里开始。使用writeObject(), 并使用readObject() 阅读它们。按照你的方式,使用ObjectOutputStream 根本没有意义。

    注意:附加到此文件将不起作用。请参阅here 了解原因。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-05-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多