java有关文件传输的read以及write方法——丑九怪
涉及处理文件的操作,简单说一下read方法和write方法,简单的不提了,相信大家在使用的时候,会碰到两个三参的方法,至于用法,且听我娓娓道来
- read(byte[] b, int off, int len);
用来从调用他的stream处,向缓冲区写数据
第一个参数 : 很明显,这是一个buffer,一个缓冲区
第二个参数 :这里可以理解为偏移量,也就是说,你想从这个缓冲区的第几个字 节开始存放读入的数据,你就写几,但是一般情况下默认我们都写0
第三个参数 :一次性可以读入的最大字节数。网传的64K,其实不然,我觉得这个还是自己调试,只要不比前面给出来的缓冲区大,且快就行
返回值:返回成功写入缓存区的字节数
注:第二个参数,如果设置为m,那么第三个参数最大设置为(缓冲区大小-m),否则会出现IndexOutOfBoundsException异常,就是说你接收的数据超出了缓存区
- write(byte[] b, int off, int len)
用来从调用他的stream处,将缓存区的数据发出
第一个参数:这还是一个缓冲区
第二个参数:偏移量,表示你要从缓冲区的第几个字节出开始发出数据,一样,默认我们都写0
第三个参数:一次性可以发出的最大字节数,一般设置为缓冲区大小,当然也要注意第二个参数的设置,一定不能超出缓冲区的大小
返回值:返回成功发出的字节数
public static final int BUFFER_SIZE = 5;
File fileIn = new File("./src/lib/验证.txt");
File fileOut = new File("./src/lib/newFile.txt");
try {
FileInputStream fis = new FileInputStream(fileIn);
FileOutputStream fos = new FileOutputStream(fileOut);
这是你要看的代码,可以看出,我在向新文件中写入时,将缓冲区的第一个字节绕过去了,也就是说,才每次写入的时候,都会少掉缓冲区的第一个字节
byte[] buffer = new byte[BUFFER_SIZE];
int len = fis.read(buffer, 0, BUFFER_SIZE);
while (len != -1) {
fos.write(buffer, 1, len - 1);
len = fis.read(buffer, 0, BUFFER_SIZE);
}
fis.close();
fos.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
上面代码的运行结果,如图所示
可以看出,我的缓冲区大小为5个字节,每次读文件时会取出五个字节,写文件时会忽略掉第一个字节,形成了这种情况
有关read的尝试,大家可以自己进行验证