我正在寻找一些简单的东西(最好不要外部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”或等效字节)放入其中。
答案 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 有自己的二进制序列化 - 请参阅ObjectOutputStream
和ObjectInputStream
。就个人而言,我通常会避免这种序列化,因为在面对类的更改时它可能非常脆弱。还有其他各种序列化方法,例如使用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 []的示例。试试谷歌。