Java 输入输出基本概念

本文最后更新于:2024年3月18日 凌晨

Java 输入输出基本概念

I/O设备与文件

  • 外部设备分为两类:存储设备与输入/输出设备。
    • 存储设备包括硬盘,软盘,光盘等,在这类设备汇总,数据以文件的形式进行组织。
    • 输入/输出设备分为输入设备和输出设备,输入设备有键盘,鼠标,扫描仪等,输出设备有显示器,打印机,绘图仪等,在操作系统中,将输入/输出设备也看作一类特殊文件。
    • 从数据操作的角度讲,文件内容可以被看作是字节的序列,根据数据的组织方式,文件可以分为文本文件和二进制文件,文本文件存放的是ASCII码(或其他编码)表示的字符,而二进制文件则是具有特定结构的字节数据。

流的概念

  • Java的输入/输出是以流的方式来处理的,流是输入/输出操作中流动的数据系列:流系列中的数据有未经加工的原始二进制数据,也有经过特定包装过滤处理的格式数据,流式输入,输出的特点是数据的获取和发送均沿数据序列顺序进行,如下图所示:

  • 从上图可以看出,输出流是像存储介质或数据通道中写入数据,而输入流是从存储介质或数据通道中读取数据,流具有以下几点特性。
    • 先进先出:最先用输出流写入到存储介质的数据最先被输入流读取到。
    • 顺序存取:写入和写出数据均按顺序逐个字节进行,不能随机访问中间的数据。
    • 只读或者只写:每个流只能是输入流火输出流的一种,不能同时具备两个功能,在一个数据传输通道中,如果既要写入数据,又要读数据,则要分别提供两个流。
  • 在Java的输入/输出类库中,提供有各种不同的流类以满足不能性质的输入/输出需要,总的来说,Java API提供了两套流来处理输入/输出,一套是面向字节的流,数据的处理是以字节为基本单位,另一套是面向字符的流,用于字符数据的处理,这里特别注意,为满足字符的国际化表示要求,Java的字符编码是采用16位表示一个字符的Unicode码,而普通的文本文件中采用的是8位的ASCII码。
  • Java提供了专门用于输入/输出功能的包java.io,其中包括5个非常重要的类,即InputStream,OutputStream,Reader,WriterFile,其他与输入/输出有关的类均是这5个类基础上的扩展。
  • 针对一些频繁的设备交互,Java系统预先定义了如下3个可以直接使用的流对象。
    • 标准输入(System.in):InputStream类型,通常代表键盘输入。
    • 标准输出(System.out):PrintStream类型,通常写往显示器。
    • 标准错误输出(System.err):PrintStream类型,通常写往显示器。
  • 标准输入/输出在实际运行时的具体目标对象也可能变化,System类汇总提供了如下方法重新设置标准流对象。
    • static void setIn(InputStream in):重新设置标准输入流。
    • static void setErr(PrintStream err):重新设置标准错误输出流。
    • static void setOut(PrintStream out):重新设置标准输出流。
  • 在Java中使用字节流和字符流的步骤基本相同,以输入流为例,首先创建一个与数据源相同的流对象,然后利用流对象的方法从流输入数据,最后执行close()方法关闭流。