290 为什么出现字节流

36 篇文章 0 订阅

290 为什么出现字节流

> 1个汉字,GBK编码下占用2字节,UTF-8编码下占用3字节。故如果挨个输出文件中的汉字,则显示为乱码。所以字节流不能读中文

【需求】

用字节流读数据

【准备】

"myCharStream\\src\\e290\\ninty.txt"

--------------------------------------------------------------

1 package e290;

3 import java.io.FileInputStream;

4 import java.io.IOException;

5 import java.util.Arrays;6

7 public class OriginalEdition {

8     public static void main(String[] args) throws IOException {

9         FileInputStream fis = new FileInputStream("myCharStream\\src\\e290\\ninty.txt");

10         int by;

11         while ((by = fis.read()) != -1) {

12             System.out.println((char) by);

13         }

14         String s1 = "abc";

15         byte[] b1 = s1.getBytes();

16         System.out.print(Arrays.toString(b1)); //[97, 98, 99]

17

18         String s2 = "中国";

19         byte[] b2 = s2.getBytes();

20         System.out.print(Arrays.toString(b2)); //[-28, -72, -83, -27, -101, -67]

21

22         String s3 = "中国";

23         byte[] b3 = s3.getBytes("UTF-8");

24         System.out.print(Arrays.toString(b3)); //[-28, -72, -83, -27, -101, -67]

25

26         String s4 = "中国";

27         byte[] b4 = s4.getBytes("GBK");

28         System.out.print(Arrays.toString(b4)); //[-42, -48, -71, -6]

29

30         fis.close();

31     }

32 }

33 /*

34 我们在前面用字节流复制过文本文件,当时用的文件里面也有中文内容,但是没有问题,为什么?

35 ——因为用字节流复制文件时,读一个字节,写一个字节,最终会根据字节拼成一个汉字。

36 系统怎么知道字节是汉字还是字母还是别的呢?

37 测试一下,找到答案,第1轮测试

38         String s="abc";//[97, 98, 99]

39         byte[] b=s.getBytes();

40         System.out.print(Arrays.toString(b));

41 输出了[97, 98, 99],一个数字对应一个字母。

42 第2轮测试,把字符串改成汉字

43         String s="中国";[-28, -72, -83, -27, -101, -67]

44         byte[] b=s.getBytes();

45         System.out.print(Arrays.toString(b));

46 输出了[-28, -72, -83, -27, -101, -67],这是UTF-8编码的

47 第3轮测试,在getBytes方法的参数里指定编码为UTF-8

48 运行完毕,写屏[-28, -72, -83, -27, -101, -67],和刚才默认的编码的写屏一样

49 第4轮测试,在getBytes方法的参数里指定编码为GBK

50 输出[-42, -48, -71, -6],由此可知在GBK编码下,1个汉字占2个字节

51 【小结】

52 - 论采用哪种编码,汉字在存储时,第一个数字一定是负数。

53 - UTF-8编码下,3个字节拼成1个汉字后输出

54 - GBK编码下,2个字节拼成1个汉字后输出

55 【总结】

56 犹豫字节流操作中文不便,Java提供字符流。

57 字符流 = 字节流 + 编码表

58  */

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值