如何使用Java中的ObjectInputStream读取不同的Object

时间:2016-01-13 18:18:25

标签: java fileinputstream fileoutputstream objectinputstream objectoutputstream

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

我使用File

创建了一个包含3个对象的ObjectOutputStream
  1. String
  2. String
  3. File(大小介于[1到1.5] GB之间)
  4. 以下是我用来编写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所以阅读&amp;同时使用32KB字节缓冲技术写入大File个流。
    2. 我是将这三个Object分别写在一个文件中吗?正确?
    3. 最后但并非最不重要的是,我应该如何检索上述所有3 ObjectObjectInputStream来自"abcd.dat" File
    4. 请帮忙。

1 个答案:

答案 0 :(得分:2)

  

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

没有。您已经创建了一个带有 no 对象和大量字节的文件,无法确定一个字节序列停止的位置和另一个字节序列的开始。使用writeObject(),并使用readObject()阅读。你拥有它的方式,根本没有使用ObjectOutputStream

注意:附加到此文件将无效。有关原因,请参阅here

相关问题