从文件中写入和读取byte []

时间:2011-01-15 10:03:09

标签: java standard-library object-serialization

我正在寻找一些简单的东西(最好不要外部lib)来编写和加载文件中的byte []。或多或少像[Python的泡菜] [1]。

byte[] bytes = new byte[10];
ByteBuffer bbuf = new ByteBuffer.allocate(bytes.length);
bbuf.wrap(bytes);   // edited due to Jon Skeet's answer
CharBuffer cbuf = bbuf.asCharBuffer();
cbuf.put("t");
FileOutputStream test = new FileOutputStream("somebytes");
test.write(bytes);
test.close();

问题似乎是我无法从这样的文件中读取Object结构。在十六进制编辑器中,文件“somebytes”只包含一对或0。因此,FileOutputStream似乎不会将任何内容(“t”或等效字节)放入其中。

[1] http://wiki.python.org/moin/UsingPickle

3 个答案:

答案 0 :(得分:4)

您已经为bytes size 分配了一个字节缓冲区,但这并不意味着字节缓冲区与字节数组相关联。您可以使用ByteBuffer.wrap包装字节数组。

以下是代码的最小更改, t写入文件:

byte[] bytes = new byte[10];
ByteBuffer bbuf = ByteBuffer.wrap(bytes);
CharBuffer cbuf = bbuf.asCharBuffer();
cbuf.put("t");
FileOutputStream test = new FileOutputStream("somebytes");
test.write(bytes);
test.close();

请注意,对于实际代码,您应该使用try / finally块来确保文件始终处于关闭状态而不管异常。

然而,这距序列化还有很长的路要走。 Java 有自己的二进制序列化 - 请参阅ObjectOutputStreamObjectInputStream。就个人而言,我通常会避免这种序列化,因为在面对类的更改时它可能非常脆弱。还有其他各种序列化方法,例如使用Thrift或Protocol Buffers进行二进制序列化,或序列化为XML,JSON或其他一些人类可读的格式。

答案 1 :(得分:0)

你可以

seek(position)
b = read(length)

然后b将是你长度的字节数组。

对不起 - 重新阅读你正在寻找写作,而不是阅读。

答案 2 :(得分:-1)

同一件事的更简单版本是。

byte[] bytes = new byte[10];
bytes[1] = 't';

FileOutputStream test = new FileOutputStream("somebytes");
test.write(bytes);
test.close();

有很多关于如何从Web上的文件读取/写入byte []的示例。试试谷歌。