博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java中字符流与字节流的区别
阅读量:6627 次
发布时间:2019-06-25

本文共 2584 字,大约阅读时间需要 8 分钟。

字符流处理的单元为2个字节的Unicode字符,分别操作字符、字符数组或字符串,而字节流处理单元为1个字节,操作字节和字节数组。所以字符流是由Java虚拟机将字节转化为2个字节的Unicode字符为单位的字符而成的,所以它对多国语言支持性比较好!如果是音频文件、图片、歌曲,就用字节流好点,如果是关系到中文(文本)的,用字符流好点.所有文件的储存是都是字节(byte)的储存,在磁盘上保留的并不是文件的字符而是先把字符编码成字节,再储存这些字节到磁盘。在读取文件(特别是文本文件)时,也是一个字节一个字节地读取以形成字节序列.1.字节流可用于任何类型的对象,包括二进制对象,而字符流只能处理字符或者字符串; 2. 字节流提供了处理任何类型的IO操作的功能,但它不能直接处理Unicode字符,而字符流就可以。字节流与字符流主要的区别是他们的的处理方式字节流是最基本的,所有的InputStream和OutputStream的子类都是,主要用在处理二进制数据,它是按字节来处理的但实际中很多的数据是文本,又提出了字符流的概念,它是按虚拟机的encode来处理,也就是要进行字符集的转化这两个之间通过 InputStreamReader,OutputStreamWriter来转换,实际上是通过byte[]和String来转换的。在实际开发中出现的中文的乱码问题其都是在字符流和字节流之间转化不统一而造成的。转换:在从字节流转化为字符流时,实际上就是byte[]转化为String时, public String(byte bytes[], String charsetName) 有一个关键的参数字符集编码,通常我们都省略了,那系统就用操作系统的lang 而在字符流转化为字节流时,实际上是String转化为byte[]时, byte[] String.getBytes(String charsetName)也是一样的道理 Java实例篇: IO分两种流 字节流 InputStream OutputStream 字符流 Reader Writer 他们都是抽象类 具体实现 字节流 FileInputStream FileOutputStream 字符流 FileReader FileWriter  字节流转换成字符流可以用 InputSteamReader OutputStreamWriter 转换成BufferdReader BufferedWriter 他们具有缓冲区下面举例说明://读取文件 从字节流输入到字符流输入 public static void writer() { FileInputStream fileInputStream = null; InputStreamReader inputStreamReader = null; BufferedReader bufferedReader = null; FileOutputStream fileOutputStream = null; OutputStreamWriter outputStreamWriter = null; BufferedWriter bufferedWriter = null; try{  // 定义一个指向D:/TEXT.TXT 的字节流   fileInputStream = new FileInputStream("d:\\test.txt");  // 字节流转换成InputStreamReader   inputStreamReader = new InputStreamReader(fileInputStream);   // InputStreamReader 转换成带缓存的bufferedReader   bufferedReader = new BufferedReader(inputStreamReader);  // 可以把读出来的内容赋值给字符   String str = new String();   String line;   // 从次读取一行字符  while((line = bufferedReader.readLine()) != null){    str += line + "\n";   }   System.out.println(str);    // 写入文件 从字节流输出到字符流输出  fileOutputStream = new FileOutputStream("d:\\test_new.txt");  outputStreamWriter = new OutputStreamWriter(fileOutputStream);  bufferedWriter = new BufferedWriter(outputStreamWriter);  bufferedWriter.write(str);  } catch(IOException ex){  ex.printStackTrace(); } finally{  try{   if(null != fileInputStream) fileInputStream.close();   if(null != inputStreamReader) inputStreamReader.close();   if(null != bufferedReader)  bufferedReader.close();   if(null != fileOutputStream) fileOutputSream.close();   if(null != outputStreamWriter) outputStreamWriter.close();   if(null != bufferedWriter) bufferedWriter.close();  } catch(IOException ex){   ex.printStackTrace();  } }}

 

本文转自农夫山泉别墅博客园博客,原文链接:http://www.cnblogs.com/yaowen/p/4846931.html,如需转载请自行联系原作者

你可能感兴趣的文章
Webtop中新建文档,无法选择Type和Format
查看>>
Integration Services创建ETL包
查看>>
IE浏览器开发中遇到的问题
查看>>
【C#学习笔记】载入图片并居中
查看>>
php实现按utf8编码对字符串进行分割
查看>>
Ftp的断点下载实现
查看>>
[转载] ubuntu Authentication failure
查看>>
Ring0 - 链表
查看>>
修改数组之----splice
查看>>
a版本冲刺第五天
查看>>
Arduino示例教程超声波测距实验
查看>>
Redis操作hash
查看>>
轻松搞定个人虚拟桌面部署之5-在客户端测试远程桌面
查看>>
Linux中chkconfig使用介绍
查看>>
二进制方式快速安装MySQL数据库
查看>>
Centos5上部署udev
查看>>
挑战WORD极限排版之模板与加载项
查看>>
Tomcat配置多数据源
查看>>
js string format
查看>>
httpHandlers和httpModules接口介绍 (3)
查看>>