流:字节流和字符流
字节流:处理二进制数据,用于处理原始数据,不应该用来处理文本内容
字符流:处理字符数据,自动转换本地字符集
行尾结束符: \r\n 或者\r 或者\n
对象流:处理对象二进制数据
需要对流进行关闭:
字符流操作:Reader,Writer
字节流操作:InputStream,OutputStream
Channel,GatheringByteChannel,InterruptibleChannel
ReadableByteChannel,ScatteringByteChannel,WritableByteChannel
Channels, DatagramChannel,FileChannel,FileLock,Pipe
SelectableChannel,SelectionKey,Selector,ServerSocketChannel,SocketChannel
中文两个字节,英文1个字节,一个字节8bit,高位补零
字节流不会使用内存缓冲,文件本身直接操作
字符流操作使用内存缓冲,用缓冲操作文件,字符流在输出前将内容保存在内容中
主要有四类操作:
1:字节操作:InputStream和OutputStream
2:字符操作:Reader和Writer
3:磁盘操作:File
4:网络操作:Socket
无论是网络还是磁盘,存储单元都是字节,字符是在字节的基础上进行了转换:
InputStreamReader
拿到字节数据后,要指定编码字符集,否则采用的是系统默认的字符集
磁盘IO机制:
系统在内核空间中加入了缓存机制,如果用户访问的是同一磁盘地址的空间数据,那么会从缓存中返回
标准访问方式:
调用read时,操作系统检查内核缓存中有没有数据,如果没有则从磁盘读取并缓存到内核缓存
调用write时:先复制到缓存中,对于用户来说操作已经完成,什么时候写入磁盘由操作系统决定
直接IO方式:
应用直接访问磁盘,不经过系统内核数据缓存区,通常使用在数据库管理系统中
同步访问方式:读取和写入都是同步操作,写入经过高速缓存然后进入磁盘,读取经过磁盘到高速缓存
异步访问方式:发起读写请求后,线程去处理其他的,等待高速缓存从磁盘读取回来后再操作
内存映射方式:把内存的一块区域和文件关联起来,文件的数据就是内存中的数据
FileInputStream会创建一个FileDescriptor对象,这个对象是真正代表一个存在的文件对象的描述
可以通过getFD犯法获取真正操作与底层操作系统相关的文件的描述
传入文件名时,创建一个File对象。读取File对象内容时,创建一个FileDescriptor操作,使用StreamDecoder类将byte解码成char格式。然后返回char数据
Java序列化技术:java序列化就是将一个对象转换成一串二进制字节数组。这样&