字符流复制文件异常的原理是什么
希望能详细讲字节和字符之间的转换

解决方案 »

  1.   

    在java里一个字符是由2个字节组成,表示一个Unicode编码,仅此而已。字节是表示所有对象的最小单位,也即是说所有的对象都是用字节来表示的。只不过你要遵守约定的规范来表示,这个规范就是编码。请自行百度关键字:ASCII、Unicode、UTF-8、GB2312等等编码。
      

  2.   

    我想问的是字符流复制文件的原理
    read方法读取字节然后返回int值 ,然后write方法接收int值参数,然后转字节写入文件 ,的详细流程,例如返回的是int值代表什么, 和非字符 返回int值是什么
    字符'a' 或者','在unicode码表中也是两个字节吗?
      

  3.   

    read方法读取字节然后返回int值 ,然后write方法接收int值参数,然后转字节写入文件 ,的详细流程,例如返回的是int值代表什么, 和非字符 返回int值是什么
    您说的这些api每个方法注释里写的都很清楚啊,不是不愿告诉你,请先自行阅读。
    字符'a' 或者','在unicode码表中也是两个字节吗?
    是的,所有字符包括中文在java里都是用2个字节表示的,因为java的char就是用Unicode编码的。而Unicode编码对所有字符都是2个字节来表示。你可百度 java 字符 char,肯定能得到满意的答案。其实楼主更应该去掌握下字符编码的知识,很多问题自然就明白了。
      

  4.   

     字符流和字节流read方法返回的值, 有关联吗?
    api的解释是一个是字符,一个是字节 但是不是说字符是两个字节吗? 这是否意味着这两个可以互转, 或者说
    FileInputStream fi = new FileInputStream("read.txt");
    FileReader fr = new FileReader("read.txt");
    System.out.println(fi.read()); // 196 二进制:11000100
    System.out.println(fi.read()); //  227 二进制:11100011
    System.out.println(fr.read()); // 20320 二进制: 100111101100000从二进制看这两个数字没任何关系啊
    我不太能理解ASCII和unicode之间的关系 , 顺便说下我是百度没有找到才提问的
      

  5.   

    ### 字符流和字节流的区别#### 编码表- ASCII码表:    中中文占两个字节  
    Unicode码表:    中所有符号占两个字节, 包括符号和字母

    #### 读取方式`重载read()` - 字符流 - 单字符 
        - 读取字节
        - 返回字节, 'a'的字节是97  

    - 字节流 - 单字节 - 根据码表对应字节数来决定读取多少个字节,然后补全至八位int值  
        - 读取的字符
     
    - 代码分析
    ```java
    class Test { public static void main(String[] args) throws IOException {
    FileInputStream fi = new FileInputStream("read.txt"); 
    // 字节流读取'你'
    int temp = fi.read();
    System.out.println(temp); // 结果为 196
    FileReader fr = new FileReader("read.txt"); 
    // 字符流读取'你'
    int t
    emp2 = fr.read();
    System.out.println(temp2); // 结果为 20320 }
    }
    ```
    #### 写入方法`重载write()`
    - 字节流
    - 传入字节的int值
    - 写入字节
    - 字符流
    - 传入字符
    - 根据平台默认码表拆分字节写入文件

    #### 字节流输出字符异常
    - 不能确定多少个字节表示一个字符, 例如不同的平台默认字符集码表,unicode编码是2个字节一个字符, 而utf-8编码是3个字节一个字符#### 字符流复制文件异常- 按照平台默认字符集读取2个字节, 写入的时候查码表没有找到对应不知道这样能否理解我的问题
      

  6.   

    字节读取int  返回 0 到 255 范围内的 int 字节值。如果因已到达流末尾而没有可用的字节,则返回值 -1。
    字符读取int  作为整数读取的字符,范围在 0 到 65535 之间 (0x00-0xffff),如果已到达流的末尾,则返回 -1