IO体系总结
1.分类
按照流向分为输入流和输出流
按照操作单元分为字节流和字符流
按照角色分为结点流和处理流
可以从/向特定IO设备(如磁盘、网络)读/写数据的流称为节点流。节点流也被称为低级流,当使用节点流进行输入和输出时,程序直接连接到实际的数据源,和实际输入/输出节点连接。
处理流则用于对一个已存在的流进行连接和封装,通过封装后的流来实现数据的读/写功能。处理流也被称为高级流
当·使用处理流进行输入/输出时,程序并不会直接连接到实际的数据源,没有和实际的输入和输出节点连接。使用处理流一个明显的好处是,只要使用相同的处理流,程序就可以采用完全相同的输入/输入代码来访问不同的数据源,随着处理流所包装节点流的变化,程序实际所访问的数据源也相应的发生变化
2.结构
3.常用流分类表
分类字节输入流字节输出流字符输入流字符输出流
抽象基类InputStreamOutputStreamReaderWriter
访问文件FileInputStreamFileOutputStreamFileReaderFileWriter
访问数组ByteArrayInputStreamByteArrayOutputStreamCharArrayReaderCharArrayWriter
访问管道PipedInputStreamPipedOutputStreamPipedReaderPipedWriter
访问字符串StringReaderStringWriter
缓冲流BufferedInputStreamBufferedOutputStreamBufferedReaderBufferedWriter
转换流InputStreamReaderOutputStreamWriter
对象流ObjectInputStreamObjectOutputStream
抽象基类FilterInputStreamFilterOutputStreamFilterReaderFilterWriter
打印流PrintStreamPrintWriter
推回输入流PushbackInputStreamPushbackReader
特殊流DataInputStreamDataOutputStream
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.使用
字节输入流输出流
publicclassFileOutputStreamTest{
publicstaticvoidmain(String[]args)throwsIOException{
FileInputStreamfis=null;
FileOutputStreamfos=null;
try{
//创建字节输入流
fis=newFileInputStream("文件路径");
//创建字节输出流
fos=newFileOutputStream("文件路径");
byte[]b=newbyte[1024];
inthasRead=0;
//循环从输入流中取出数据
while((hasRead=fis.read(b))>0){
//每读取一次,即写入文件输入流,读了多少,就写多少。
fos.write(b,0,hasRead);
}
}catch(IOExceptione){
e.printStackTrace();
}finally{
fis.close();
fos.close();
}
}
}
转换流的使用
publicclassInputStreamReaderTest{
publicstaticvoidmain(String[]args)throwsIOException{
try{
// 将System.in对象转化为Reader对象
InputStreamReaderreader=newInputStreamReader(System.in);
//将普通的Reader包装成BufferedReader
BufferedReaderbufferedReader=newBufferedReader(reader);
Stringbuffer=null;
while((buffer=bufferedReader.readLine())!=null){
// 如果读取到的字符串为“exit”,则程序退出
if(buffer.equals("exit")){
System.exit(1);
}
//打印读取的内容
System.out.print("输入内容:"+buffer);
}
}catch(IOExceptione){
e.printStackTrace();
}finally{
}
}
}
转换流的使用
publicclassInputStreamReaderTest{
publicstaticvoidmain(String[]args)throwsIOException{
try{
// 将System.in对象转化为Reader对象
InputStreamReaderreader=newInputStreamReader(System.in);
//将普通的Reader包装成BufferedReader
BufferedReaderbufferedReader=newBufferedReader(reader);
Stringbuffer=null;
while((buffer=bufferedReader.readLine())!=null){
// 如果读取到的字符串为“exit”,则程序退出
if(buffer.equals("exit")){
System.exit(1);
}
//打印读取的内容
System.out.print("输入内容:"+buffer);
}
}catch(IOExceptione){
e.printStackTrace();
}finally{
}
}
}