Java字符流与字节流区别与用法分析

 更新时间:2016年06月24日 09:22:29   作者:雨竹  
这篇文章主要介绍了Java字符流与字节流区别与用法,较为详细的分析了java字符流与字节流的概念、功能与使用方法,具有一定参考借鉴价值,需要的朋友可以参考下

本文实例讲述了Java字符流与字节流区别与用法。分享给大家供大家参考,具体如下:

字节流与字符流主要的区别是他们的的处理方式

流分类:

1.Java的字节流

InputStream是所有字节输入流的祖先,而OutputStream是所有字节输出流的祖先。

2.Java的字符流

Reader是所有读取字符串输入流的祖先,而writer是所有输出字符串的祖先。

InputStream,OutputStream,Reader,writer都是抽象类。所以不能直接new
字节流是最基本的,所有的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中还出现了许多其他的流,按主要是为了提高性能和使用方便,

如:BufferedInputStream,PipedInputStream等

具体实现

字节流 FileInputStream FileOutputStream
字符流 FileReader FileWriter

字符流处理的单元为2个字节的Unicode字符,分别操作字符、字符数组或字符串,而字节流处理单元为1个字节,操作字节和字节数组。所以字符流是由Java虚拟机将字节转化为2个字节的Unicode字符为单位的字符而成的,所以它对多国语言支持性比较好!如果是音频文件、图片、歌曲,就用字节流好点,如果是关系到中文(文本)的,用字符流好点.

所有文件的储存是都是字节(byte)的储存,在磁盘上保留的并不是文件的字符而是先把字符编码成字节,再储存这些字节到磁盘。在读取文件(特别是文本文件)时,也是一个字节一个字节地读取以形成字节序列.

字节流可用于任何类型的对象,包括二进制对象,而字符流只能处理字符或者字符串; 2. 字节流提供了处理任何类型的IO操作的功能,但它不能直接处理Unicode字符,而字符流就可以。

字节流转换成字符流可以用 InputSteamReader OutputStreamWriter
转换成BufferdReader BufferedWriter 他们具有缓冲区
例如:读取文件 从字节流输入到字符流输入
定义一个字节流:

FileInputStream fileInputStream = new FileInputStream("d:/text.txt");
// 定义一个指向D:/TEXT.TXT 的字节流
InputStreamReader inputStreamReader = new InputStreamReader(fileInputStream);
//字节流转换成InputStreamReader
BufferedReader bufferedReader = new BufferedReader(inputSteamReader);
//InputStreamReader 转换成带缓存的bufferedReader

可以把读出来的内容赋值给字符

String ss = new String();
String s;
while((s = bufferedReader.readLine())!=null){
    ss += s;
}
FileInputStream fileInputStream = new FileInputStream("d:/text.txt"); // 定义一个指向D:/TEXT.TXT 的字节流   InputStreamReader inputStreamReader = new InputStreamReader(fileInputStream);  //字节流转换成InputStreamReader   BufferedReader bufferedReader = new BufferedReader(inputSteamReader);  //InputStreamReader 转换成带缓存的bufferedReader  可以把读出来的内容赋值给字符  String ss = new String();  String s;  while((s = bufferedReader.readLine())!=null){ ss += s; }

例如:写入文件 从字节流输出到字符流输出

FileOutputStream fileOutputStream = new FileOutputStream("d:/text.txt");
//定义一个指向D:/TEXT.TXT文件
OutputStreamWriter outputStreamWriter = new OutputStreamWriter(fileOutputStream);
BufferedWriter bufferedWriter = new BufferedWriter(outputStreamWriter);
bufferedWriter.write(s);
bufferedWriter.close();
outputStreamWriter.close();
fileOutputStream.close();
FileOutputStream fileOutputStream = new FileOutputStream("d:/text.txt");  //定义一个指向D:/TEXT.TXT文件
OutputStreamWriter outputStreamWriter = new OutputStreamWriter(fileOutputStream);
BufferedWriter bufferedWriter = new BufferedWriter(outputStreamWriter);
bufferedWriter.write(s);
bufferedWriter.close();
outputStreamWriter.close();
fileOutputStream.close();

例程:

将字符串转化为字节流 #region  将字符串转化为字节流

/**/ ///  <summary>
/// 将字符串转化为字节流
///  </summary>
///  <param name="_Source"> 字串 </param>
///  <returns> 字节流 </returns>
public  static  byte [] String2Bytes( string strSource)
{
   System.IO.MemoryStream  memoryStream = new  System.IO.MemoryStream();
   System.IO.BinaryWriter  binaryWriter = new  System.IO.BinaryWriter(memoryStream);
   binaryWriter.Write( strSource );
   byte []  buffer = memoryStream.GetBuffer();
   return buffer;
}
#endregion

将字节流转化为字符串 #region  将字节流转化为字符串

/**/ ///  <summary>
/// 将字节流转化为字符串
///  </summary>
///  <param name="bytData"> 字节流 </param>
///  <returns> 字串 </returns>
public  static  string Bytes2String( byte [] bytData)
{
   // 字节流->字符串
   System.IO.MemoryStream  memoryStream2 =  new  System.IO.MemoryStream(bytData);
   System.IO.BinaryReader  binaryReader =  new  System.IO.BinaryReader(memoryStream2);
   string  s2 = binaryReader.ReadString();
   return s2;
}
#endregion

希望本文所述对大家java程序设计有所帮助。

相关文章

  • Java倒计时三种实现方式代码实例

    Java倒计时三种实现方式代码实例

    这篇文章主要介绍了Java倒计时三种实现方式代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-07-07
  • 浅谈java 增强型的for循环 for each

    浅谈java 增强型的for循环 for each

    下面小编就为大家带来一篇浅谈java 增强型的for循环 for each。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-10-10
  • Java实现下载文件的6种方式

    Java实现下载文件的6种方式

    本文主要介绍了Java实现下载文件的6种方式,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-06-06
  • SpringCloud整合OpenFeign问题

    SpringCloud整合OpenFeign问题

    这篇文章主要介绍了SpringCloud整合OpenFeign问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-05-05
  • nexus私服启动不了问题及解决

    nexus私服启动不了问题及解决

    这篇文章主要介绍了nexus私服启动不了问题及解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-04-04
  • mybatis中的setting配置详解

    mybatis中的setting配置详解

    这篇文章主要给大家介绍了关于mybatis中setting配置的相关资料,文中通过示例代码介绍的非常详细,对大家具有一定的参考学习价值,需要的朋友们下面来一起看看吧。
    2017-06-06
  • java中的stream流中的并行查询java

    java中的stream流中的并行查询java

    Stream流是Java 8引入的一种新的数据处理方式,它提供了一种高效、简洁的数据处理方式,Stream流可以让我们以声明式的方式处理数据,提高了代码的可读性和可维护性,同时,Stream流支持并行处理,可以充分利用多核CPU的性能,提高程序的运行效率
    2024-07-07
  • ssm框架controller层返回json格式数据到页面的实现

    ssm框架controller层返回json格式数据到页面的实现

    这篇文章主要介绍了ssm框架controller层返回json格式数据到页面的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-09-09
  • Java Swing JFrame窗口的实现

    Java Swing JFrame窗口的实现

    这篇文章主要介绍了Java Swing JFrame窗口的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-12-12
  • Java使用openssl检测网站是否支持ocsp

    Java使用openssl检测网站是否支持ocsp

    OCSP在线证书状态协议是为了替换CRL而提出来的。对于现代web服务器来说一般都是支持OCSP的,OCSP也是现代web服务器的标配,这篇文章主要介绍了Java使用openssl检测网站是否支持ocsp,需要的朋友可以参考下
    2022-07-07

最新评论