输入输出
1. 文件、网络、压缩包等数据——>数据流——>目的地 (输入模式)
源——>数据流——>文件、网络、压缩包等数据(输出模式)
输入流:从源中读出数据
输出流:向目的地写入数据
2. 字节流分为输入流InputStream(抽象类)和输出流OutputStream(抽象类),字符流分为输入流Reader(抽象类)和输出流Write(抽象类),使用的是Unicode字符。
字符流:主要用于读取文本
字节流:主要用于读取二进制文件,图片等,防止出现读取单位过大,出现误差。
3. Java.io.File类提供了对文件的各项操作,包括创建文件对象,显示文件信息,文件操作等等。本质上是对文件路径的一种抽象。“.”代表当前目录。
4. 对于各种数据流,用完之后用close()关闭,释放系统资源。
5. 文件输入/输出流(只提供了对单个或数组的读取方法)
字节流:Java.io.FileInputStream java.io.FileOutputStream
字符流:java.io.FileReader java.io.FileWriter
注:对于文件输出流,若文件不存在,则自动创建文件!
6. 带缓存的输入/输出流(通过包装基本数据流达到I/O优化的目的)
原理:划分一个缓冲区数组,通过减少输入输出次数来提高读写速度。即在输入时,先将一整块数据从输入流读入缓冲区数组,然后从缓冲区数组中读数据;在输出时,先将数据写入缓冲区数组,等数组达到一定量时或调用flush()方法,整体写入输出流。
字节类:java.io.BufferedInputStream java.io.BufferedOutputStream
字符类:java.io.BufferedReader java.io.BufferedWriter
LineNumberReader是BufferReader的包装类,带行号的字符缓冲流。
在程序最后一定要调用flush()方法,否则不一定能保证将输出流上的所有字符(节)输出。
7. 数据流(以与机器无关的方式读写java基本类型数据,与平台无关)
Java.io.DataInputStream jva.io.DataOutputStream
8. 对象数据流(是7中 数据流的升级版)
ObjectInputStream ObjectOutputStream
注:
a. 只有实现了可序列化接口Serializable的对象才可写入输入流,Serializable()接口是一种标记性接口。
b. 如果对象内含有不用序列化的数据,需要将该数据声明为transient,即在写入输出流时,忽略该数据。
c. 数组本质上就是一个对象,如果数组中存储的数据都是可序列化的,那么该数组是可序列化的。
d. 对象在可序列化的过程中,会对类、实例变量、从初始对象引用的其他对象包进行编码,但是不会存储对象静态变量的值,因为该值已经隐含在类中了。
Serializable对象使用uid号对类进行标识,可在类中显示指定类的uid号。
9. 随机读写文件
具有随机访问方式,独立于字节流与字符流之外。
Java.io.RandomAccessFile
注:该类的写方法是指覆盖式写入,该类内部封装了输入流与输出流。
可使用多线程方式对文件进行分段存取(下载软件原理)
10. 分析文本文件
以令牌(单词)的形式对文件进行读取
Java.io.StreamTokenizer
11. 数组流(即数组与流之间的相互转化)
字节:Java.io.ByteArrayInputStream ByteArrayOutputStream
字符:CharArrayInputStreamCharArrayOutputStream
12. 字节流与字符流的转换
Java.io.InputStreamReader java.io.OutputStreamWriter
注:可按指定编码表进行转换。
13. 打印流
PrintStream、PrintWriter
可按照指定编码方式进行打印
14. 合并流
SequenceInputStream可将若干输入流合并到一起
15. 管道流
PipedInputStream、PipedOutputStream
可用于将输入流、输出流对接。
16. 字符串流
StringReaderStringWriter
将字符串转换成流对象,对其进行操作。
17. 使用控制台输入参数文件、输出结果文件
Java example output.txt
18. *用于命令行时,代表当前路径下所有文件
Eg:java Test *; // args数组中存储的当前路径下所有的文件名
19. 编码
编码表:GBK(默认)、Unicode、ISO(欧洲码表)、ASCII、UTF-8(Unicode transform format— 至少8位)
除ASCII码表外,其他编码一般为负数。