本文主要是介绍每年桃花开的时候,我就会想起IO流,她曾经很难为我....,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
目录
前言:
一、IO流:
二、字节流:
1、字节输入流:
FIleInputStream:
BufferedInputStream:
2、字节输出流:
FileOutputStream:
BufferedOutputStream:
三、字符流:
1、字符输入流:
InputStreamReader:
BufferedReader:
2、字符输出流:
OutputStreamWriter:
小问题:
前言:
大家吼啊!今天给大家带来秋天的第一篇博客。
不知道是不是个人原因,感觉一开始看这个IO流视频就感觉有点难,然后导图整理也多花了一点时间,毕竟基础不牢,地洞山摇嘛,都是为以后打夯基础。下面这张图中流非常的多,不用晕哈,我们现在先只学其中的四个抽象基类,包含其中的四个文件流、四个缓冲流。
一、IO流:
上图是按照数据类型将IO流划分为字节流和字符流,其实还有一种按照数据的流向来划分的方法,将其划分为输入流和输出流。
概念:
IO:输入/输出(Input/Output)
流:是一种抽象概念,是对数据传输的总称。也就是说数据在设备间的传输称为流,流的本质是数据传输。
IO流就是用来处理设备间数据传输问题的。常见的应用:文件复制;文件上传;文件下载
二、字节流:
字节流分为字节输入流和字节输出流。
1、字节输入流:
字节输入流(InputStream):
IO流下的四个抽象基类之一,是表示字节输入流的所有类的超类。
我们先学习它其中的FIleInputStream和BufferedInputStream。
FIleInputStream:
构造方法:FileInputStream(String name)
读取字节数据方法:
int |
| 从该输入流读取一个字节的数据。 |
---|---|---|
int |
| 从该输入流读取最多 |
int |
| 从该输入流读取最多 |
BufferedInputStream:
字节缓冲输入流。
创建BufferedInputStream将创建一个内部缓冲区数组。 当从流中读取或跳过字节时,内部缓冲区将根据需要从所包含的输入流中重新填充,一次很多字节。使用该缓冲流读取数据时会比较快捷。FileInputStream的三个读取方法它也可以使用。构造方法:BufferedInputStream(InputStream in)
2、字节输出流:
字节输出流(OuputStream):
IO流下的四个抽象基类之一,是表示字节输出流的所有类的超类。
我们先学习它其中的FileOutputStream和BufferedOutputStream。
FileOutputStream:
构造方法:FileOutputStream(String name)
写入字节数据方法:
void | write(byte[] b) | 将 |
---|---|---|
void | write(byte[] b, int off, int len) | 将 |
void | write(int b) | 将指定的字节写入此文件输出流。 |
BufferedOutputStream:
字节缓冲输出流。
该类实现缓冲输出流。 通过设置这样的输出流,应用程序可以向底层输出流写入字节,而不必为写入的每个字节导致底层系统的调用。FileOutputStream的三个写数据方法它也能用。
构造方法:BufferedOutputStream(OutputStream out)
三、字符流:
字符流分为字符输入流和字符输出流。
1、字符输入流:
字符输入流(Reader)。
用于读取字符流的抽象类。
我们先学习它的InputStreamReader和BufferedReader。
InputStreamReader:
是从字节流到字符流的桥梁。
它读取字节,并使用指定的编码将其解码为字符。
它使用的字符集可以由名称指定,也可以被明确指定,或者可以接受平台的默认字符集。
构造方法:
InputStreamReader(InputStream in) | 创建一个使用默认字符集的InputStreamReader。 |
---|---|
InputStreamReader(InputStream in, String charsetName) | 创建一个使用命名字符集的InputStreamReader。 |
读字符数据方法:
int | read() | 读一个字符 |
---|---|---|
int | read(char[] cbuf, int offset, int length) | 将字符读入数组的一部分。 |
FileReader:
继承自InputStreamReader
用于读取字符文件的便捷类。
构造方法:FileReader(String fileName)
BufferedReader:
字符缓冲输入流。
从字符输入流读取文本,缓冲字符,以提供字符,数组和行的高效读取,可以指定缓冲区大小,或者可以使用默认大小。 默认值足够大,可用于大多数用途。构造方法:BufferedReader(Reader in)
特有方法:
String | readLine() | 读一行文字。 结果包含行的内容的字符串,不包括任何行终止字符如果流的结尾已经到达,则为null |
---|
注意:此方法不读换行符等,换行需自加。
2、字符输出流:
字符输出流(Writer)。
我们先学习它的OutputStreamWriter和BufferedWriter。
OutputStreamWriter:
是从字符流到字节流的桥梁,使用指定的编码将写入的字符编码为字节
它使用的字符集可以由名称指定,也可以被明确指定,或者可以接受平台的默认字符集
构造方法:
OutputStreamWriter(OutputStream out) | 创建一个使用默认字符编码的OutputStreamWriter。 |
---|---|
OutputStreamWriter(OutputStream out, String charsetName) | 创建一个使用命名字符集的OutputStreamWriter。 |
写入字符数据方法:
void write(int c) | 写一个字符 |
void write(char[] cbuf) | 写入一个字符数组 |
void write(char[] cbuf, int off, int len) | 写入字符数组的一部分 |
void write(String str) | 写一个字符串 |
void write(String str, int off, int len) | 写一个字符串的一部分 |
刷新和关闭流的方法:
void | close() | 关闭流,先刷新。 |
---|---|---|
void | flush() | 刷新流。 |
FileWriter:
用于写入字符文件的便捷类。
构造方法:FileWriter(String fileName)
BufferedWriter:
字符缓冲输出流。
将文本写入字符输出流,缓冲字符,以提供单个字符,数组和字符串的高效写入,可以指定缓冲区大小,或者可以接受默认大小。默认值足够大,可用于大多数用途。注意:使用该缓冲流写入数据后记得使用flush方法刷新流,避免数据停留在缓冲区。
构造方法:BufferedWriter(Writer out)
特有方法:
void newLine() | 写一行行分隔符,行分隔符字符串由系统属性定义 |
小问题:
输入和输出两个概念个人很难区分,例如读取文本数据时,应该先创建字符缓冲输入流对象,也就是BufferedReader,但我老是会混淆,我会下意识的创建BufferedWriter,会把写(Writer)当成输入,把读(Reader)当成输出。
这篇关于每年桃花开的时候,我就会想起IO流,她曾经很难为我....的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!