美文网首页Java工程师知识树
Java基础-IO流-字节流与字符流

Java基础-IO流-字节流与字符流

作者: HughJin | 来源:发表于2021-01-10 06:55 被阅读0次

Java工程师知识树 / Java基础


Java流的分类按数据传输单位分:

字节流: 以字节为单位传输数据的流。以InputStream、OutputStream作为抽象基类。

字符流: 以字符为单位传输数据的流。以Writer、Reader作为抽象基类。

字节流和字符流选择

  • 字节流:字节流读取的时候,读到一个字节就返回一个字节; 主要用于读取图片,MP3,AVI视频文件。InputStream、OutputStream
  • 字符流:字符流使用了字节流读到一个或多个字节,如读取中文时,就会一次读取2个字节。只要是处理纯文本数据,就要优先考虑使用字符流。Writer、Reader

字节流

字节流: 以字节为单位传输数据的流。以InputStream、OutputStream作为抽象基类。

Java中的字节流处理的最基本单位为单个字节,它通常用来处理二进制数据。Java中最基本的两个字节流类是InputStream和OutputStream,它们分别代表了最基本的输入字节流和输出字节流。InputStream类与OutputStream类均为抽象类,我们在实际使用中通常使用Java类库中提供的它们的一系列子类。

字节输入流InputStream的基本共性功能方法:
1、 public void close() :关闭此输入流并释放与此流相关联的任何系统资源。
2、public abstract int read(): 从输入流读取数据的下一个字节。
3、 public int read(byte[] b): 该方法返回的int值代表的是读取了多少个字节,读到几个返回几个,读取不到返回-1
以上三个方法则是字节输入流都具有的方法,由父类InputStream定义提供,子类都会共享以上方法

字节输出流OutputStream的基本共性功能方法:
1、 public void close() :关闭此输出流并释放与此流相关联的任何系统资源。
2、 public void flush() :刷新此输出流并强制任何缓冲的输出字节被写出。
3、 public void write(byte[] b):将 b.length个字节从指定的字节数组写入此输出流。
4、 public void write(byte[] b, int off, int len) :从指定的字节数组写入 len字节,从偏移量 off开始输出到此输出流。 也就是说从off个字节数开始读取一直到len个字节结束
5、 public abstract void write(int b) :将指定的字节输出流。
以上五个方法则是字节输出流都具有的方法,由父类OutputStream定义提供,子类都会共享以上方法

字符流

字符流: 以字符为单位传输数据的流。以Writer、Reader作为抽象基类。

Java中的字符流处理的最基本的单元是Unicode码元(大小2字节),它通常用来处理文本数据。所谓Unicode码元,也就是一个Unicode代码单元,范围是0x0000~0xFFFF。在以上范围内的每个数字都与一个字符相对应,Java中的String类型默认就把字符以Unicode规则编码而后存储在内存中。然而与存储在内存中不同,存储在磁盘上的数据通常有着各种各样的编码方式。使用不同的编码方式,相同的字符会有不同的二进制表示。实际上字符流是这样工作的:

  • 输出字符流:把要写入文件的字符序列(实际上是Unicode码元序列)转为指定编码方式下的字节序列,然后再写入到文件中;
  • 输入字符流:把要读取的字节序列按指定编码方式解码为相应字符序列(实际上是Unicode码元序列)从而可以存在内存中。

Reader类与Writer类均为抽象类,我们在实际使用中通常使用Java类库中提供的它们的一系列子类。

Reader字符输入流的共性方法:
1、public void close() :关闭此流并释放与此流相关联的任何系统资源。
2、 public int read(): 从输入流读取一个字符。
3、 public int read(char[] cbuf): 从输入流中读取一些字符,并将它们存储到字符数组 cbuf中

Writer字符输出流的基本共性功能方法:
1、void write(int c) 写入单个字符。
2、void write(char[] cbuf)写入字符数组。
3、 abstract void write(char[] cbuf, int off, int len)写入字符数组的某一部分,off数组的开始索引,len写的字符个数。
4、 void write(String str)写入字符串。
5、void write(String str, int off, int len) 写入字符串的某一部分,off字符串的开始索引,len写的字符个数。
6、void flush()刷新该流的缓冲。
7、void close() 关闭此流,但要先刷新它。

字符流与字节流的区别

字节流与字符流之间主要的区别体现在以下几个方面:

  • 字节流操作的基本单元为字节;字符流操作的基本单元为Unicode码元。
  • 字节流默认不使用缓冲区;字符流使用缓冲区。
  • 字节流通常用于处理二进制数据,实际上它可以处理任意类型的数据,但它不支持直接写入或读取Unicode码元;字符流通常处理文本数据,它支持写入及读取Unicode码元。

相关文章

  • 字节流与缓冲流

    java零基础入门-高级特性篇(十二) IO 流 2 本章先来看两大“流”派中的字节流。字节流相对字符流总体结构简...

  • Java基础之IO流

    1.IO流 Java中有几种类型的流 答:字节流,字符流。字节流继承于InputStream、OutputStre...

  • Java IO流的使用

    下面部分内容是参考Oubo的博客——Java IO流学习总结 Java流操作有关的类或者接口: 字符流和字节流 字...

  • 从0开始复习java(9)--IO

    Java的io通过java.io包下的类和接口支持。主要有输入、输出流,又分为字节流和字符流。Java的io流使用...

  • 5-Java IO-装饰模式

    1.Java IO分类节点流-过滤流输入流-输出流字节流-字符流 2.InputStream,节点输入字节流的祖宗...

  • Java IO和NIO

    Java IO Java IO面向流,按照流中的最小数据单元可以分为字节流和字符流,顾名思义分别以字节和字符作为数...

  • Java基础-IO流-字节流与字符流

    Java工程师知识树[https://www.jianshu.com/p/db77d19a25f6] / Ja...

  • No.16 转换流InputStreamReader/Outpu

    简介 在java.io除了字节流/字符流之外,还存在一组字节流-字符流的转换类。1.OutputStreamWri...

  • Java/C++ IO 实例详解

    1 Java 字节流(byte),字符流(char,string)区别? 什么是流:IO操作就是流。比如,标准输入...

  • Android面试之Java基础笔试题

    Java IO流 按照数据流的方向不同可以分为:输入流和输出流。 按照处理数据单位不同可以分为:字节流和字符流。字...

网友评论

    本文标题:Java基础-IO流-字节流与字符流

    本文链接:https://www.haomeiwen.com/subject/gacinktx.html