1.什么是文件IO操作呢?
文件的IO操作将磁盘文件中的数据读取到内存中或者将内存中的数据写回磁盘文件的操作.
对于FileInputStream,主要是将磁盘文件中的数据读入到用户态JVM堆内存的过程,具体会先从磁盘文件拷贝到内核态的内存(RAM)中,然后再将内核态内存中的数据拷贝到用户态的内存空间,对于Java主要是指拷贝到JVM堆中的过程.
对于FileOutputStream,主要是指将内核态内存(JVM堆)中的数据写回磁盘文件的过程,具体会先将用户态内存的数据拷贝回内核态的内存(RAM),然后再写回磁盘文件的过程.
2.常用IO流以及具体使用
从操作数据是属于字节还是字符可以分为字符流和字节流两大类,字节流的父类主要是指继承自InputStream和OutputStream的所有子类.而字符流主要指继承自Reader和Writer的所有子类.
字符流和字节流的区别
字符流: 操作的基本单元为Unicode码元,使用缓冲区,
字节流: 操作的基本单位为字节,默认不使用缓存区。
字节流常用方法
方法 | 描述 |
---|---|
read() | 从InputStream流读取下一个字节的数据 |
read(byte b[]) | 从InputStream中读取0到byte数组长度的数据并保存到byte数组中,最多读取byte数组长度数据,如果数据不够byte数组长度,则读取实际数据大小 |
read(byte b[], int off, int len) | 读取0到len个数据并保存到byte数组中,其中第一个数据将保存到byte[off]位置,具体读取多少数据以实际数据多少为主,最多读取len数据 |
close() | 关闭与文件或其他IO设备的流 |
字符流常用方法
方法 | 描述 |
---|---|
read() | 读取单个字符数据 |
read(java.nio.CharBuffer target) | 读取数据到CharBuffer |
read(char cbuf[]) | 读取数据到字符数组中 |
read(char cbuf[], int off, int len) | 读取数据到字符数组中,同时从off开始存储,最多存储len个字符 |
close() | 关闭与字符流 |
常用流介绍
- 文件流相关
FileInputStream:主要从文件中读取数据
FileOutputStream:主要将内存中的数据写回文件
从文件读取数据
public class FileDemo {
public static void main(String[] args) throws Exception{
InputStream