gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 00:47:01 26 4
gpt4 key购买 nike

我正在寻找一些简单的东西(最好没有外部库)来从文件中写入和加载字节[]。或多或少有点像[Python的pickle][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();

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

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

最佳答案

您已经分配了一个大小字节的字节缓冲区,但这并不意味着该字节缓冲区与字节数组关联。您可以使用 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 block 来确保文件始终关闭,无论异常如何。

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

关于java - 从文件中写入和读取 byte[],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4698995/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com