InputStream和OutputStream

本文深入探讨了Java中InputStream和OutputStream的基本用法,通过具体实例展示了如何进行字节读写操作,并重点解释了字符编码对文本文件读写的影响,特别是中文在不同编码下显示差异的原因。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

InputStream和OutputStream都是字节流也就是每次读取或者写入一个字节

看如下程序

public static void main(String[] args) throws Exception{
		// TODO Auto-generated method stub
		     InputStream read=new  FileInputStream("C:\\a.txt");
		     OutputStream writer=new  FileOutputStream("C:\\b.txt");
		    int a;
		     while((a=read.read())!=-1)
		     {  Integer.toHexString(a);
                          System.out.print((char)a);
		    	 writer.write(a);
		     }
		     
         }


a.txt中的内容如下

dad问字大点dasd
dasdkda好的

控制台打印如下:


b.txt中的内容和a.txt中的内容相同

为什么控制台和b.txt中的内容不同呢

原因是TXT的默认编码是ANSI即字母占一个字节,中文占两个字节 如下图


当我们read的时候也就是程序a变量每次获得十六进制编码如下图


可以看出原来的编码和现在的编码相同都是ANSI 但是当我们把a打印print的时候会发现字母正确,中文乱码

根据API文档我们可以发现

public void print(char c)
打印字符。按照平台的默认字符编码将字符转换为一个或多个字节,并完全以 write(int) 方法的方式写入这些字节。
参数:
c - 要打印的 char

  这里的默认编码中文环境下为GBK即使用GBK编码 再交给控制台输出但是这里交给他的参数是一个字节 所以出错乱码
      

而写入b.txt时是将a.txt编码原封不动的写入的所以不会造成错误

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值