JAVA语言——IO

Posted by 冷眼樵夫 on 12-26,2018

IO体系介绍

输入输出

包括对控制台,内存,文件,图形图像,网络和数据库的读写等。在Java语言中,java.io包就提供了很多完成输入输出处理功能。

流是一种有序的字节源或目的,当程序需要读取数据时就要打开一个通向数据源的流;而当程序需要写入数据的时候就会打开一个通向目的地的流,数据就好像在管道中流动一样。

将流按三种方式分类:

    1. 输入流和输出流,
    2. 字节流和字符流,
    3. 以及从一个特定地方读写的结点流和连接已经存在的流的过滤流。

这种分类方式是相互重叠的。

基本流的介绍

基本流一般是指
InputStream
OutputStream
Reader
Writer
这四个抽象类表示的流,其他流均是他们派生出来的子类。
其中InputStream与OutputStream是处理8位的字节流数据,Reader和Writer是处理16位的字符流数据。

注意:字节流和字符流可以相互之间进行转换,使用的就是转换器InputStreamReader和OutputStreamWriter,InputStreamReader将字节流InputStream转换为Reader的字符流。同理OutputStreamWriter将OutputStream字节流转换为Writer的字符流。

过滤流FilterInputStream和FileterOutputStream继承基本流,并实现了过滤接口DataInput和DataOutput
对象流ObjectInputStream和ObjectOutputStream也继承基本流,并实现了对象接口ObjectInput和ObjectOutput
随机文件RandomAccessFile也实现了过滤接口,目的就是为了简化读写手续,统一数据读写方法。

文件流完成对磁盘文件的读写,而文件类File主要是管理文件或者文件夹的属性。

字节IO

字节输入输出,以InputStream为代表的输入和以OutputStream为代表的输出,它们和自己的子类一起构成了字节输入输出体系。

InputStream:

这个类是一个抽象类,为所有字节输入类的父类,其方法都是通过子类对象来调用的,主要方法有:

file

OutputStream:

这个类是抽象类,是所有字节输出类的父类,其方法都是通过子类对象来调用。

file

字节标准输入流

System.in就是字节标准输入流的对象。主要接收控制台的输入,并提供read()方法读取数据。可以使用InputStream类的所有方法。这个对象有两种使用方式

使用Scanner扫描输入流对象,实现从控制台输入

Scanner in = new Scanner(System.in);

使用InputStreamReader将System.in转换成字符流,再进行下一步操作。或者再用BufferedReader包装一下。

BufferedReader br=new BufferedReader(new InputStreamReader(System.in));

字节标准输出流

System.out就是标准输出流。PrintStream的一个对象,主要完成数据的格式化输出和在控制台中输出各种数据类型结果。

PrintStream是OutputStream的子类,因此System.out可以使用OutputStream的所有方法。自身的format()和printf()方法很有趣。
(没有想到一直使用这个东西,居然原理在今天被发现了,System.out是一个PrintStream对象,println()是该对象调用的一个方法。

字节文件输入输出

FileInputStream
该类是InputStream的子类,用于完成读取文件的字节值功能,还可以读取如图像数据之类的原始数据流。
常用的构造方法:

FileInputStream(File file):通过已经存在的File类对象进行构造
FileInputStream(String filename):直接使用文件名进行构造

FileOutputStream
该类是OutputStream的子类,用于将数据写入字节文件输出流,也可写入图像数据之类道德原始字节流。
常用的构造方法:

  • FileOutputStream(File file):通过已经存在File类对象进行构造
  • FileOutputStream(String name):通过名字进行构造

字节过滤输入输出

过滤流的作用是能够在读写数据的同时对数据进行处理,并且提供同步机制,使得某一个时刻只有一个线程访问这个输入输出流,防止多个线程同时对同一个输入输出流进行操作带来的坏结果。使用时必须把过滤流与某个具体的输入输出流相连接。
通常的做法是在构造方法的参数中指定要连接的输入输出流。
过滤流的父类是FileInputStream和FilterOutputStream,最常用的是他们的子类DataInputStream和DataOutputStream,用于完成平台无关的字节过滤输入输出处理。
DataInputStream
DataOutputStream

字符IO

输入输出两大分支,以Reader为父类的字符输入,以Writer为父类的字符输出。它们与各自的子类共同构成了字符输入输出体系

字符输入输出

Reader
是一个用于读取字符类的抽象类,为所有字符输入类的父类,其方法都是通过子类对象来调用的。
file

Writer
是一个用于写入字符流的抽象类,为所有输出字符类的父类,其方法都是通过子类对象来调用的。
file

字符标准输出

这里没有字符标准输入
PrintWriter,主要完成字符标准输出流的文本格式化
常用构造方法:
由文件名构造字符标准输出流对象

PrintWriter pw=new PrintWriter("data.txt");
由字节输出流构造字符标准输出流对象
PrintWriter pw=new PrintWriter(System.out);
由字符标准输出流对象构造新的字符标准输出流对象
PrintWriter pw1=new PrintWriter(pw);

字符缓冲输入输出

BufferedReader
从字符输入流中读取文本并缓冲各个字符,以便提供关于字符,数组和文本行的高效读取方式,还可以改变缓冲区的大小。
常用的构造方法:

BufferedReader br=new BufferedReader(Reader in);
普通方法常用就是:
String readLine()读取一行字符串,并去掉回车换行符。

BufferedWriter
将文本写入字符输出流并缓冲各个字符,以提供单个字符,数组和字符串的高效写入方式,缓冲区的大小可以改变。常用的构造方法是:

BufferedWriter(Writer out),常用的方法是:void newLine(),用于写入一个回车符。

字符文件输入输出

FileReader类和FileWriter类。
FileReader
用来读取字符文件;
常用构造方法:

FileReader(File file)
FileReader(String filename)

FileWriter
用来写入字符文件。
构造方法:
file

字符串输入输出

StringReader
使用字符串输入流读取一个字符串,构造方法:

StringReader(String string);

StringWriter
通过字符流的字符串缓冲区的输出来构造字符串,构造方法:

StringWriter()


0评论