我有一个需要从文件读取和写入RGB值的程序。但是,我遇到了一个应用程序问题,我从文件中读回的数据与我写入的数据不同。
程序:
public static void main(String[] args) throws Exception {
FileOutputStream fos = new FileOutputStream(new File("ASDF.txt"));
fos.write(0xFF95999F);
fos.flush();
fos.close();
FileInputStream fis = new FileInputStream(new File("ASDF.txt"));
byte read;
while((read = (byte) fis.read()) != -1) {
System.out.print(String.format("%02X ", read));
}
fis.close();
}
输出:
9F
答案 0 :(得分:1)
一个字节是8位,这意味着它可以存储最多255个(如果签名则为128个)。当你调用fos.write(0xFF95999F)时,它会将其转换为一个字节,这意味着它会删除除最后两个数字之外的所有数字(十六进制)。如果需要写入多个字节,则需要将整数转换为字节数组。正如a related SO article中建议的那样,
ByteBuffer b = ByteBuffer.allocate(4);
//b.order(ByteOrder.BIG_ENDIAN); // optional, the initial order of a byte buffer is always BIG_ENDIAN.
b.putInt(0xFF95999F);
byte[] result = b.array();
fos.write(result);
...
应该更适合你。 (为什么FileOutputStream接受一个int而不是一个我无法回答的字节,但我想这是一个愚蠢的原因,为什么一些获取列表的Java方法(getCookie浮出水面)会返回null而不是空列表......他们现在坚持的过早优化。)