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

时间:2015-04-28 23:47:50

标签: java file io java-io

我有一个需要从文件读取和写入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

1 个答案:

答案 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而不是空列表......他们现在坚持的过早优化。)