0

当我创建文件时,我使用 dataoutputstream 一次写入一个“int”:

Database.write(0)

当然它没有说 0 它是一个变量,但我打印了它,第一个是 0 所以我以那个为例。

现在我不是 100% 确定,但只使用那行代码,我的文件现在应该包含:

0000 0000 0000 0000 0000 0000 0000 0000

正确的?

因此,当我尝试使用以下方法读取前 4 个字节时:

RandomAccessFile raf = new RandomAccessFile("Database", "r");
raf.seek(0);

byte[] ByteArr = new byte[4];
raf.read(ByteArr, 0, ByteArr.length);

ByteArr 应该只包含 0?

好吧,我打印了 Byte[],这就是我得到的:

0
4
13
-126

亲切的问候困惑的船长

4

3 回答 3

2

write()方法将单个字节写入文件。它的参数是一个 int,但假定该 int 在 [0, 255] 范围内。

如果要将完整的 4 字节 int 写入文件,请使用该writeInt()方法。否则,要再次仅检索值 0,请使用 . 从文件中读取一个字节read()

附带说明一下,RandomAccessFile 可以同时处理读取和写入,因此您应该同时使用它。

于 2013-09-28T01:55:25.483 回答
1

问题DataOutputStream.write(int b)实际上是只写入最低有效字节。如果要写出 4 个字节,则需要使用DataOutputStream.writeInt(int)

于 2013-09-28T01:55:28.043 回答
0

你用中文写东西,然后用英文读,当然没有意义。如果你想用DataOutputStream写,你必须用DataInputStream读。如您所见,原始读取无法理解数据流使用的编码。或者,您可以读取原始字节,但是您也必须编写它们,而不是使用对数据进行编码的 DataOutputStream 以便 DataInputStream 可以对其进行解码。

于 2013-09-28T01:55:56.437 回答