java基础--IO体系总结
IO体系总结
1.分类
- 按照流向分为输入流和输出流
- 按照操作单元分为字节流和字符流
- 按照角色分为结点流和处理流
- 可以从/向特定IO设备(如磁盘、网络)读/写数据的流称为节点流。节点流也被称为低级流,当使用节点流进行输入和输出时,程序直接连接到实际的数据源,和实际输入/输出节点连接。
- 处理流则用于对一个已存在的流进行连接和封装,通过封装后的流来实现数据的读/写功能。处理流也被称为高级流
当·使用处理流进行输入/输出时,程序并不会直接连接到实际的数据源,没有和实际的输入和输出节点连接。使用处理流一个明显的好处是,只要使用相同的处理流,程序就可以采用完全相同的输入/输入代码来访问不同的数据源,随着处理流所包装节点流的变化,程序实际所访问的数据源也相应的发生变化
2.结构

3.常用流分类表
| 分类 | 字节输入流 | 字节输出流 | 字符输入流 | 字符输出流 |
|---|---|---|---|---|
| 抽象基类 | InputStream | OutputStream | Reader | Writer |
| 访问文件 | FileInputStream | FileOutputStream | FileReader | FileWriter |
| 访问数组 | ByteArrayInputStream | ByteArrayOutputStream | CharArrayReader | CharArrayWriter |
| 访问管道 | PipedInputStream | PipedOutputStream | PipedReader | PipedWriter |
| 访问字符串 | StringReader | StringWriter | ||
| 缓冲流 | BufferedInputStream | BufferedOutputStream | BufferedReader | BufferedWriter |
| 转换流 | InputStreamReader | OutputStreamWriter | ||
| 对象流 | ObjectInputStream | ObjectOutputStream | ||
| 抽象基类 | FilterInputStream | FilterOutputStream | FilterReader | FilterWriter |
| 打印流 | PrintStream | PrintWriter | ||
| 推回输入流 | PushbackInputStream | PushbackReader | ||
| 特殊流 | DataInputStream | DataOutputStream |
4.常用方法
InputStream和Reader的常用方法
- void mark(int readAheadLimit); 在记录指针当前位置记录一个标记
- boolean markSupported(); 判断此输入流是否自持mark()操作,即是否支持记录标记
- void reset(); 将此流的记录指针重新定位到上一次标记(mark的位置)
- long skip(long n); 记录指针向前移动n个字节/字符
OutputStream和Writer的常用方法
- void write(int c); 将指定的字节/字符输出到输出流中,其中c即可以代表字节,也可以代表字符
- void write(byte[]/char[] buf); 将字节数组/字符数组中的数据输出到指定输出流中
- void write(byte[]/char[] buf,int off,int len); 将字节数组/字符数组从off位置开始,长度为len的字节/字符输出到输出流中
5.使用
字节输入流输出流
public class FileOutputStreamTest {
public static void main(String[] args)throws IOException {
FileInputStream fis=null;
FileOutputStream fos=null;
try {
//创建字节输入流
fis=new FileInputStream("文件路径");
//创建字节输出流
fos=new FileOutputStream("文件路径");
byte[] b=new byte[1024];
int hasRead=0;
//循环从输入流中取出数据
while((hasRead=fis.read(b))>0){
//每读取一次,即写入文件输入流,读了多少,就写多少。
fos.write(b,0,hasRead);
}
}catch (IOException e){
e.printStackTrace();
}finally {
fis.close();
fos.close();
}
}
}
转换流的使用
public class InputStreamReaderTest {
public static void main(String[] args)throws IOException {
try {
// 将System.in对象转化为Reader对象
InputStreamReader reader=new InputStreamReader(System.in);
//将普通的Reader包装成BufferedReader
BufferedReader bufferedReader=new BufferedReader(reader);
String buffer=null;
while ((buffer=bufferedReader.readLine())!=null){
// 如果读取到的字符串为“exit”,则程序退出
if(buffer.equals("exit")){
System.exit(1);
}
//打印读取的内容
System.out.print("输入内容:"+buffer);
}
}catch (IOException e){
e.printStackTrace();
}finally {
}
}
}
转换流的使用
public class InputStreamReaderTest {
public static void main(String[] args)throws IOException {
try {
// 将System.in对象转化为Reader对象
InputStreamReader reader=new InputStreamReader(System.in);
//将普通的Reader包装成BufferedReader
BufferedReader bufferedReader=new BufferedReader(reader);
String buffer=null;
while ((buffer=bufferedReader.readLine())!=null){
// 如果读取到的字符串为“exit”,则程序退出
if(buffer.equals("exit")){
System.exit(1);
}
//打印读取的内容
System.out.print("输入内容:"+buffer);
}
}catch (IOException e){
e.printStackTrace();
}finally {
}
}
}

浙公网安备 33010602011771号