IO操作:
input:数据从流向内存
output:数据流向外部设备
字节流,字符流适合处理各种非纯文本数据和纯文本。
节点流,处理流:对节点流的包装,实现特定功能的增强。节点流是直接作用在文件和内存之间。
四大抽象类:InputStream/OutputStream Reader/Writer
四大节点流:FileInputStream/FileOutputStream FileReader/FileOutputWriter
四大缓存流:BufferedInputStream/BufferedOutputStream BufferedReadere/BufferedWriter
Alt Shift Z:可以选中代码块
为了保证流一定会被手动关闭,要使用try-catch-finally语法
流为啥要手动关闭呢?节约资源?
字符节点流:FileReader/FileWriter
read(): int 将字符unicode值对应的Integer值 末尾返回-1
read(char[]): int 返回读到的字符个数 | -1
read(char[], int index, int count): int
close(): void 关闭流
String(char[],int index,int count) : String 构造字符串
write(char[]): void
write(String): void -> String::toCharArray(): char[]
文件不存在则创建,默认替换内容
FileInputStream/FileOutputStream FileOutputStream(File,boolean) read(byte[]): int -> String(byte[],int off, int len) write(byte[]): void write(byte[],int,int):void
提高文件的读写效率
缓冲流:BufferedInputStream/BufferOutputStream
BufferedInputStream(InputStream)
BufferedOutputStream(OutputStream)
BufferedOutputStream(OutputStream,boolean)
内部实际上是开辟了一个空间,先把一些数据取来,这样节省时间a:
private static int DEFAULT_BUFFER_SIZE = 8192;
关闭先关闭处理流,在关闭内层节点流; 实际上关闭了内存的结点流
flash(): void 刷新缓冲区,数据输出(入)
BufferReader/BufferWriter:
新增方法:readLine(): String | null 读取一行,不包含换行符
newline(): 提供换行操作
转换流:针对内存层面是字符,可以操作不同编码的文本
InputStreamReader/OutputStreamWriter:
InputStreamReader(InputStream): 使用系统默认字符集,
InputStreamReader(InputStream,String):指定字符集: UTF-8 gbk
OutputStreamWriter(OutputStream,String):指定字符集: UTF-8 gbk
后续操作和FileInputReader()一致
标准输入、输出流:
System.in,System.out -> InputStream | PrintStream
setIn(InputStream)/setOut(OutputStream): 重指定输入,输出设备
打印流:PrintStream、PrintWriter
默认输出对象是控制台,setout(OutputStream): 将打印流打印到其他地方
数据流:用于读取写出基本数据类型
DataInputStreamDateOutputStream
readXxx()
readUTF()
readFully(byte[])
WriteXxx()
WriteUTF()
WriteFully(byte[])
注意读取的顺序和写入的顺序一致
604 ~ 608未观看 晚上观看 10/21
serialVersionUID保证类修改后还能找到,保证内部引用的对象本身也是可序列化的 static & transient修饰变量不能序列化
对象流持久化对象:该对象必须实现Serializble | Externalizable 接口 & public static final long serialVersionUID = XXX;
ObjectInputStream/ObjectOutputStream
存取基本数据类型,对象本身,static或者transient的成员变量无法序列化
writeObject(Object obj):写入一个对象 -> 需要显式的刷新 readObject():Object
随机存取文件流:RandomAcceseeFile extends Object implements DataOutput, DataInput
RandomAccessFile(String, String mode)
RandomAccessFile(File, String mode)
r:只读 rw:读写 rwd:同步文件内容更新 rws:新增元数据
write(byte[]):不清空数据情况下覆盖,可以插入操作
seek(int index):将指针调入相对索引,从0开始
byteArrayOutputStream:
byteArrayOutputStream():
可以将字节写入这个流中
NIO:基于缓冲区
NIO2:Path、Files,paths
Path接口是升级版File
常用方法见API



