我使用Java的FileChannel类编写了一个文件,其中使用了RandomAccessFiles。我在文件的各个位置写入了变量大小但相同类别的对象。我使用以下思路编写对象:
ByteArrayOutputStream bos= new ByteArrayOutputStream();
ObjectOutput out = new ObjectOutputStream(bos);
out.writeObject(r);
byte[] recordBytes= bos.toByteArray();
请注意,保留了HTML标签。 ByteBuffer rbb= ByteBuffer.wrap(recordBytes);
while(rbb.hasRemaining()) {
fileChannel.write(rbb);
}
现在我想从这样的文件中读取内容。我不想指定要读取的字节数量。我希望能够直接使用ObjectInputStream读取对象。如何实现?
我必须使用随机访问文件,因为我需要在文件中写入不同位置的内容。我还在一个单独的数据结构中记录了对象被写入的位置。
ObjectOutputStream.close()
会传播。这就是为什么你在我的示例中没有看到它的原因。相反,我调用flush()
确保内容已写入流,然后让 GC 处理它。 - parsifal