字符流和字节流read方法返回的int值有什么区别

劉強東 2016-08-17 07:59:31
字符流复制文件异常的原理是什么
希望能详细讲字节和字符之间的转换
...全文
890 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
劉強東 2016-08-19
  • 打赏
  • 举报
回复
原码反码和补码是相对于二进制而言 正数的原码既补码, 负数的反码是二进制原码取反 反码+1既补码
肃穆丶 2016-08-19
  • 打赏
  • 举报
回复
字节读取int 返回 0 到 255 范围内的 int 字节值。如果因已到达流末尾而没有可用的字节,则返回值 -1。 字符读取int 作为整数读取的字符,范围在 0 到 65535 之间 (0x00-0xffff),如果已到达流的末尾,则返回 -1
NewMoons 2016-08-18
  • 打赏
  • 举报
回复
我先问问楼主,你知道什么是计算机原码、反码、补码吗?并明确他们之间的转换关系? 搞清这个问题,我在给你讲后面的东西。
劉強東 2016-08-17
  • 打赏
  • 举报
回复
### 字符流和字节流的区别 #### 编码表 - 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个字节, 写入的时候查码表没有找到对应 不知道这样能否理解我的问题
劉強東 2016-08-17
  • 打赏
  • 举报
回复
字符流和字节流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之间的关系 , 顺便说下我是百度没有找到才提问的
NewMoons 2016-08-17
  • 打赏
  • 举报
回复
read方法读取字节然后返回int值 ,然后write方法接收int值参数,然后转字节写入文件 ,的详细流程,例如返回的是int值代表什么, 和非字符 返回int值是什么 您说的这些api每个方法注释里写的都很清楚啊,不是不愿告诉你,请先自行阅读。 字符'a' 或者','在unicode码表中也是两个字节吗?[/quote] 是的,所有字符包括中文在java里都是用2个字节表示的,因为java的char就是用Unicode编码的。而Unicode编码对所有字符都是2个字节来表示。你可百度 java 字符 char,肯定能得到满意的答案。 其实楼主更应该去掌握下字符编码的知识,很多问题自然就明白了。
劉強東 2016-08-17
  • 打赏
  • 举报
回复
我想问的是字符流复制文件的原理 read方法读取字节然后返回int值 ,然后write方法接收int值参数,然后转字节写入文件 ,的详细流程,例如返回的是int值代表什么, 和非字符 返回int值是什么 字符'a' 或者','在unicode码表中也是两个字节吗?
NewMoons 2016-08-17
  • 打赏
  • 举报
回复
在java里一个字符是由2个字节组成,表示一个Unicode编码,仅此而已。 字节是表示所有对象的最小单位,也即是说所有的对象都是用字节来表示的。只不过你要遵守约定的规范来表示,这个规范就是编码。 请自行百度关键字:ASCII、Unicode、UTF-8、GB2312等等编码。

62,621

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧