日期:2014-05-20  浏览次数:20842 次

关于FileOutputStream中写一个字节的问题?
FileOutputStream有一个方法: public native void write(int b) throws IOException;

这个方法的参数是int b (在Java中是四个字节),并且这个参数b就是要写入的字节。
但是这个方法的说明文档中说:
Writes the specified byte to this file output stream. Implements the <code>write</code> method of <code>OutputStream</code>.
也就是说这个方法是每次写入一个指定的字节.

我想问,是不是将int的最后一个字节(最低字节)写入文件中,前三个字节都不要了。

我有一个可证明这种想法的例子,就是在DataOutputStream中有一个writeInt(int v)的源代码:
Java code
    public final void writeInt(int v) throws IOException {
        out.write((v >>> 24) & 0xFF);
        out.write((v >>> 16) & 0xFF);
        out.write((v >>>  8) & 0xFF);
        out.write((v >>>  0) & 0xFF);
        incCount(4);
    }

我们可以看到,通过>>>位操作,将整形v中四个字节的每一个字节都移动到最后一个字节(最低字节),并且write出了。是不是可以说明需要写入的就是最后一个字节(最低字节)。


------解决方案--------------------
对,就是(byte)i
------解决方案--------------------
如果说只输出最后一字节,那么下面是不是应该输出aa,可结果只输出一个a,不明白啊,给解释一下吧
FileOutputStream fo = new FileOutputStream("D:/a.txt");
fo.write(97); 
fo.write(97+1<<8);
------解决方案--------------------
YES,前三字节没了,就LZ你的,运行一下就行了
Java code

        FileOutputStream out = new FileOutputStream("D:/a.txt");
        int v = 0x61626364;//0x61为'a' ASCII
        out.write(v >>> 24);
        out.write(v >>> 16);
        out.write(v >>> 8);
        out.write(v);//v
        System.out.println("" + v + "," + (char) (v & 0xff));
        out.close();
/*run:
1633837924,d
成功生成(总时间:2 秒)
*/

/*D:/a.txt中
abcd
*/

------解决方案--------------------
探讨
FileOutputStream有一个方法: public native void write(int b) throws IOException;

这个方法的参数是int b (在Java中是四个字节),并且这个参数b就是要写入的字节。
但是这个方法的说明文档中说:
Writes the specified byte to this file output stream. Implements the <code>write </code> method of <code>OutputStream </code>.
也就是说这个方法是每次写入一个指定的字节.

我想问,是不是将int的最后一个字节(最低字节)写入文件中,前三个字节都不要了。

我有一个可证明这种想法的例子,就是在DataOutputStream中有一个writeInt(int v)的源代码:
Java codepublicfinalvoid writeInt(int v)throws IOException {
out.write((v>>>24)&0xFF);
out.write((v>>>16)&0xFF);
out.write((v>>>8)&0xFF);
out.write((v>>>0)&0xFF);
incCount(4);
}
我们可以看到,通过>>>位操作,将整形v中四个字节的每一个字节都移动到最后一个字节(最低字节),并且write出了。是不是可以说明需要写入的就是最后一个字节(最低字节)。


------解决方案--------------------
ObjectOutputStream 你应该用这个方法写非byte类型