[英]Writing bytes to file then reading yields different bytes
我有一个程序需要从文件读取和写入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
一个字节为8位,这意味着它最多可以存储255(如果有符号,则可以存储128)。 当您调用fos.write(0xFF95999F)时,会将其强制转换为一个字节,这意味着它将剥离除最后两个数字(十六进制)之外的所有数字。 如果需要写入多个字节,则需要将整数转换为字节数组。 正如相关SO文章中所建议的,类似
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而不是一个空列表。他们现在坚持进行的优化。)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.