您的位置:首页 > 编程语言 > PHP开发

InputStream和OutputStream

2014-02-20 19:56 309 查看
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编码原封不动的写入的所以不会造成错误
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: