比如我用FileOutputStream的成员方法write(int a)往一个记事本写入11,12,13,14,用FileReader也能读出12.13.14.15。我是这样认为的,FileOutputStream是字节流,存入数字的时候取低八位的一个字节存入,而FileReader读取的是一个字符,即两个字节的位置输出。请问大家我这样的理解有错吗?为什么还能输出12.13.14.15呢?

解决方案 »

  1.   

    理解没错,建议Lz看下java file,字符主要是处理汉字,数字,字母都可以,字节流主要读取图片,音频,二进制文件方面的
      

  2.   

    问题补充:我刚才用RandomAccessFile检测了一下,发现不管是FileOutputStream还是FileWriter存入记事本的都是低八位的一个字节,不管是FileInputStream还是FileReader也都读取的是一个字节,这是为什么,FileWriter和FileReader不是字符流吗?
      

  3.   

    FileWriter继承的OutputStreamWriter,而OutputStreamWriter使用StreamEncoder写入,最终的实现看源代码
    public void write(int c) throws IOException {
              char cbuf[] = new char[1];
               cbuf[0] = (char) c;
               write(cbuf, 0, 1);
          }
    强转成char再写入的,最终只不过是把c这个字节转成char
    不知道是楼主理解错了还是表达错了,write(int a)这个参数表示的是一个字节数不是整数
      

  4.   

    FileOutputStream字节流,FileWriter字符流没错FileWriter写一个字符会保存几个字节,这取决于字符的值和编码集
    ISO字符集下,每个字符1个字节
    GBK字符集,中文字符2个字节
    UTF-8,中文字符3字节,英文字符1字节
    UTF-16,所有字符都是2字节所以FileWriter到底会写几个字节,这没有一定的啊,你发现它写了一个字节,不过是凑巧而已。你把int值放大一些,比如0x7530,可能就会发现不同.