因此,我试图将3个long存储到一个文件中,但是它将存储大量数据,因此我将其转换为字节数组并保存。我目前的保存方法:
*()
longToBytes方法:
try (FileOutputStream output = new FileOutputStream(path, true)) {
//Put the data into my format
byte[] data = new byte[24];
main.getLogger().log(Level.INFO, "Saving most sig bits");
System.arraycopy(ByteUtils.longToBytes(uuid.getMostSignificantBits()), 0, data, 0, 8);
System.arraycopy(ByteUtils.longToBytes(uuid.getLeastSignificantBits()), 0, data, 8, 8);
System.arraycopy(ByteUtils.longToBytes(player.getTokens()), 0, data, 16, 8);
//Write data in the format
output.write(data);
}
字节数组被保存到文件,但是第一个字节被截断。 longToByes中的print语句将打印8次三遍。
原始多头是:
-9089798603852198353,-5339652910133477779,5992
如果我打印字节数组,我将得到:
-127,-38,-116,84,97,-116,78,47,-75,-27,-67,-8,11,-100,-2,109,0,0,0 ,0、0、0、23、104(24个字节)
但是在文件中我看到: ÚŒTaŒN/ µå½ø(VT符号)œþm(nul)(nul)(nul)(nul)(nul)(nul)(etb)h 这是23个字节(记事本中没有显示第一个框)
但是如果我使用
阅读private static ByteBuffer buffer = ByteBuffer.allocate(8);
public static byte[] longToBytes(long x) {
System.out.println(x);
buffer.putLong(0, x);
return buffer.array();
}
我知道:
64,-38,-116,84,97,-116,78,47,-75,-27,-67,-8,11,-100,-2,109,0,0,0, 0、0、0、23、104(24个字节)
-127被64取代。
我用“”组合字节以将其打印出来。
答案 0 :(得分:4)
请勿使用FileReader
从文件中读取原始字节。请改用FileInputStream
。
FileReader
的问题在于,它试图通过使用某些字符编码对字节进行解码(如果未指定字符,则默认为chars
而不是bytes
)从文件中读取bytes = IOUtils.toByteArray(new FileInputStream(file));
)。
DataOutputStream
或者,您可以使用DataInputStream
直接向输出流中写入长数据,并使用try (DataOutputStream out = new DataOutputStream(new FileOutputStream(file))) {
out.writeLong(uuid.getMostSignificantBits());
out.writeLong(uuid.getLeastSignificantBits());
out.writeLong(player.getTokens());
}
try (DataInputStream in = new DataInputStream(new FileInputStream(file))) {
long uuidMSB = in.readLong();
long uuidLSB = in.readLong();
long tokens = in.readLong();
}
从输入流中读取数据。
:target