Java培训:理解Java中的字节流和字符流

更新时间: 2022-05-13 10:57:25来源: 粤嵌教育浏览量:7984

  Java通过称为流的抽象来执行I/O操作。 Java定义了两种基本类型的流,称为字节流和字符流。字节流类提供了一种方便的方式来处理字节的输入和输出,而字符流分别提供了一种方便的方式来处理字符的输入和输出。本文详细阐述了Java中流处理的这两个概念。对Java感兴趣的同学,可以参加Java培训来获得知识和技能,以便快速上岗。

  流概述

  从Java的角度来看,“流”本质上是指一种抽象,用于产生和消费顺序信息流。信息流可以是在链接到Java I/O子系统的任何物理设备上执行的输入或输出操作的结果。实际链接的设备可能会有所不同,例如本地存储设备或网络。但是,基本原理保持不变。通常Java流支持多种设备,如键盘、网络套接字、磁盘文件等。因此,它为实际链接到的不同类型的设备提供了一种方便的方式来处理I/O操作。steam类捆绑在java.io包中。

  字节流和字符流

  Java中有两种类型的流:字节和字符。当I/O流管理8位字节的原始二进制数据时,称为字节流。并且,当I/O流管理16位Unicode字符时,称为字符流。 Unicode 集基本上是一种字符集,其中每个字符对应于给定字符集中的特定数值。通常,每种编程语言都采用特定的字符集来表示和管理其对字符的使用。除了Unicode,另一个常用的字符集是ASCII,由国际标准组织 (ISO) 定义。在Java(1.0 版)开始时,它没有字符流;因此,所有I/O操作都是面向字节的。字符流是后来引入的(1.1 版)。请注意,字符流和字节流的概念不应与低级I/O操作混在一起;毕竟,它们总是位和字节。但是,字符流和字节流本质上提供了一种方便高效的方式来处理Java中的数据流。

  有什么不同?

  如前所述,差异只是为了方便。有些流本质上是面向字节的,有些是面向字符的。因此,使用I/O流包中定义的适当类和方法来处理它们总是很方便。例如,FileOutputStream用于读取原始字节流,例如图像数据。同样,FileOutputStream 对象可用于写入原始字节流。在类似的情况下,可以分别使用基于面向字符的数据流FileReader和FileWriter来读写文件。这些类提供了特定的方法来操作适当的流数据。想掌握 Java 技术的同学不妨报个Java培训班,可以节省学习时间,提高学习效率,在短时间内学有所成,还能找到一份不错的工作。



  字节流类

  在字节流类层次结构的顶部,有两个抽象类:InputStream 用于面向字节的输入,OutputStream 用于面向字节的输出操作。分层布局如下:

  InputStream:面向字节的输入流的顶级抽象类。

  ByteArrayInputStream:此类的一个实例包含一个用于读取字节流的内部缓冲区。

  FilterInputStream:此类的一个实例包含一些其他输入流,作为进一步操作的基本数据源。

  BufferedInputStream:这使FilterInputStream实例能够使用缓冲区来存储输入数据。

  DataInputStream:此类的一个实例能够以与机器无关的方式从底层输入流中读取原始 Java 类型。

  LineNumberInputStream:此类的一个实例有助于跟踪输入流的当前行号。

  PushbackInputStream:这提供了在读取数据字节后推回或“未读”数据字节的能力。

  FileInputStream:此类的一个实例用于从文件系统中的文件中获取输入字节。

  ObjectInputStream:该类的一个实例用于在对象被 ObjectOutputSteam 序列化后对其进行反序列化。

  PipedInputStream:这个类的一个实例为输入字节提供了一个管道或缓冲区,它以 FIFO 方式工作。

  SequenceInputStream:此类的一个实例表示两个或多个输入流的逻辑串联,这些输入流一个接一个地依次读取。

  OutputStream:面向字节的输入流的顶级抽象类。在java培训中,有更加系统全面的课程,明确清晰的学习路线,学习起来既轻松,又高效。

  ByteArrayOutputStream:此类的一个实例包含一个用于写入字节流的内部缓冲区。

  FilterOutputStream:此类的一个实例包含一些其他输出流,作为进一步操作的基本数据源。

  BufferedOutputStream:这使 FilterOutputStream实例能够使用缓冲区来输出数据。

  DataOutputStream:此类的一个实例能够以与机器无关的方式将原始 Java 类型写入底层输出流。

  PrintStream:这使 OutputStream 对象能够方便地打印各种数据值的表示形式。

  FileOutputStream:此类的一个实例用于输出流,用于将数据写入文件或文件描述符。

  ObjectOutputStream:这个类的一个实例用于序列化一个可以用ObjectInputStream反序列化的对象。

  PipedOutputStream:这个类的一个实例为输出字节提供了一个管道或缓冲区,它以先进先出的方式工作。

  字符流类

  在字符流类层次结构的顶部,有两个抽象类:面向字符输入的Reader和面向字符输出操作的Writer。分层布局如下:

  Reader:用于读取字符流的顶级抽象类。

  BufferedReader:在从字符输入流读取文本时提供中间缓冲区以提高效率。

  LineNumberReader:使用缓冲的字符输入流来跟踪行号。

  CharArrayReader:实现可用作阅读器的自动递增字符缓冲区。

  FilterReader:该类的一个实例用于读取字符文件。

  PushbackReader:这使字符能够在读取后被推回流中。想学习更多 Java 知识和技能,建议参加java培训,课程实时更新,紧跟市场和企业,让你学到最新的java技能,提高市场竞争力。



  InputStreamReader:这个类的一个实例提供了从字节流到字符流的桥梁。使用指定的字符集将字节解码为字符。

  FileReader:该类的一个实例用于读取字符文件。

  PipedReader:对字符输入流使用管道。

  StringReader:来自源字符串的字符输出流读取器。

  Writer:写入字符流的顶级抽象类。

  BufferedWriter:在将文本写入字符输出流时提供中间缓冲区以提高效率。

  CharArrayWriter:实现可用作写入器的自动递增字符缓冲区。

  FilterWriter:用于编写过滤字符流的抽象类。

  OutputStreamWriter:这个类的一个实例提供了字符流和字节流之间的桥梁。使用指定的字符集将字符编码为字节。

  FileWriter:该类的一个实例用于写入字符文件。

  PipedWriter:使用管道进行字符输出流。

  PrintWriter:将对象的格式化表示打印到测试输出流。

  StringWriter:字符输出流被收集在字符串缓冲区中,可用于构造字符串。

  预定义流

  Java 提供了三个预定义的流对象:in、out和err,它们在java.lang包的System类中定义。out对象是指标准输出流或控制台。in对象指的是标准输入,也就是键盘。而且,err对象指的是标准错误,它也只是控制台。应该很明显,它们可能被重定向到任何其他兼容的I/O设备,因为System.in只不过是InputStream的一个对象,而System.out和System.err是PrintStream类的对象。因此,它们基本上工作在面向字节的流上,尽管我们可以使用它们在控制台中读取和写入字符。

  结论

  Java 流充当文件处理包装器,根据相应的I/O结构进行操作。在许多情况下,面向字符的流类和面向字节的流类的功能非常相似。但是,这并不意味着它们没有区别。java.io包中定义的流类相当简单且不复杂,但它们确实起到了作用。另一方面,Java 8引入的新流更加复杂并且有许多有趣的用途。参加以实战项目为主要教学方法的Java培训,可以有效地缩短同企业具体用人需求之间的差距,快速提升自己。

免费预约试听课