(三)Java IO 的一般使用原则 :
一、按数据来源(去向)分类:
1 、是文件: FileInputStream, FileOutputStream, ( 字节流 )FileReader, FileWriter( 字符 )
2 、是 byte[] : ByteArrayInputStream, ByteArrayOutputStream( 字节流 )
3 、是 Char[]: CharArrayReader, CharArrayWriter( 字符流 )
4 、是 String: StringBufferInputStream, StringBufferOuputStream ( 字节流 )StringReader, StringWriter( 字符流 )
5 、网络数据流: InputStream, OutputStream,( 字节流 ) Reader, Writer( 字符流 )
二、按是否格式化输出分:
1 、要格式化输出: PrintStream, PrintWriter
三、按是否要缓冲分:
1 、要缓冲: BufferedInputStream, BufferedOutputStream,( 字节流 ) BufferedReader, BufferedWriter( 字符流 )
四、按数据格式分:
1 、二进制格式(只要不能确定是纯文本的) : InputStream, OutputStream 及其所有带 Stream 结束的子类
2 、纯文本格式(含纯英文与汉字或其他编码方式); Reader, Writer 及其所有带 Reader, Writer 的子类
五、按输入输出分:
1 、输入: Reader, InputStream 类型的子类
2 、输出: Writer, OutputStream 类型的子类
六、特殊需要:
1 、从 Stream 到 Reader,Writer 的转换类: InputStreamReader, OutputStreamWriter
2 、对象输入输出: ObjectInputStream, ObjectOutputStream
3 、进程间通信: PipeInputStream, PipeOutputStream, PipeReader, PipeWriter
4 、合并输入: SequenceInputStream
5 、更特殊的需要: PushbackInputStream, PushbackReader, LineNumberInputStream, LineNumberReader
决定使用哪个类以及它的构造进程的一般准则如下(不考虑特殊需要):
首先,考虑最原始的数据格式是什么: 原则四
第二,是输入还是输出:原则五
第三,是否需要转换流:原则六第 1 点
第四,数据来源(去向)是什么:原则一
第五,是否要缓冲:原则三 (特别注明:一定要注意的是 readLine() 是否有定义,有什么比 read, write 更特殊的输入或输出方法)
第六,是否要格式化输出:原则二
1.基本概念
IO:Java对数据的操作是通过流的方式,IO流用来处理设备之间的数据传输,上传文件和下载文件,Java用于操作流的对象都在IO包中。
New File:
1.常用方法分析:
.exists, .mkdirs, .mkdir, .createNewFile, .getparentFile, .list , .isDirect,
2.关于过滤器FilenameFilter , 匿名内部类筛选String name-- true->String, endsWith
3.方法封装-》递归
New FileOutputStream, New FileInputStream
BufferedInputStream,BufferedOutputStream:
1.常用方法分析:
.write, .close, .read ---String.getBytes
2.FileOutputStream, FileWrite后参数可以加true追加,FileInputStream如果没文件不能运行,输出则可
3.认识到了错误提示也是人定义的,java虚拟机内容
4.人造容器和系统自带容器
InputStreamReader, OutputStreamWriter
BufferedReader, BufferedWriter
ObjectInputStream, ObjectOutputStream
FileReader,FileWriter 括号里面可以直接加文件,也可以FileInputStream
1.常用方法分析:
.readLine, .newLine ------String.toCharArray
2.serivalVersionUID ,Serivalizable, --short: .writeInt, .writeUTF, .writeObject, .readObject, .readInt
括号跟fileInputStream, 使用static and transient 不会被显示
PrintStream, PrintWriter
System.in, System.out
System.setIn, System.setOut
1.常用方法分析:
.print, .println,
2.区别分析
Pri 只能放字节流, last 能放字节字符流
3.重定向流改变标准流,控制台和文件, 文件到程序 out打印流, in字节流
byteArrayInputStream, byteArrayOutputStream
RandomAccessFile, (on file, r or rw)
1.常用方法分析:
.toByteArray, .seek, .getFilePointer
2.特性总结:
内存流不能被关闭,随机访问流因为指针获得了断点续传的功能
Nio
FileChannel, mappedByteBuffer,
1.特性分析:
三大概念:缓冲区Buffered, 通道Channel, 选择器Selector
缓冲区三大要素:指针, 限制, 容量
顺序:Bio Nio(通道, 缓冲区, 指针反转, 关流)
限制存在的意义:跟反转一起,满足取值只能在指针之间
2.常用方法分析:
.getChannel, .allocate, .read, .write, .allocate, .flip, .clear, .position, .limit, .capacity,.remaining,
.get, .map, .READ_ONLY, .READ_WRITE