繁体   English   中英

将字节写入文件然后读取会产生不同的字节

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM