java nio
- java 1.4 以后推出了nio 极大的优化了java 的io性能
之前java bio的做法
/**
* 不实用缓冲流的方式
*/
public static void bioIO(String param) throws IOException {
File file = new File("/Users/llw/Desktop/111.txt");
OutputStream outputStream = new FileOutputStream(file);
for (int i = 0; i < 40000000; i++) {
outputStream.write(param.getBytes(StandardCharsets.UTF_8));
}
outputStream.close();
}
/**
* 使用缓冲流
*/
public static void bioBufferIO(String param) throws IOException {
File file = new File("/Users/llw/Desktop/222.txt");
var outputStream = new BufferedOutputStream(new FileOutputStream(file));
for (int i = 0; i < 400000000; i++) {
outputStream.write(param.getBytes(StandardCharsets.UTF_8));
}
outputStream.close();
}
对比两种方法
- bioIO每次write 都会进行写磁盘操作,都会经历从用户态到内核态的数据刷写,所以效率很低。
- bioBufferIO 会默认先写到缓冲区,不会马上写到磁盘上,等到达到了8k,统一写到磁盘上。
使用nio
- nio的优势为可以随便移动文件读/写的位置,适合做日志追加/操作大文件等操作。
RandomAccessFile
- RandomAccessFile既可以读文件,也可以写文件,所以类似于InputStream的read()方法,以及类似于OutputStream的write()方法,RandomAccessFile都具备。除此之外,RandomAccessFile具备两个特有的方法,来支持其随机访问的特性。RandomAccessFile对象包含了一个记录指针,用以标识当前读写处的位置,当程序新创建一个RandomAccessFile对象时,该对象的文件指针记录位于文件头(也就是0处),当读/写了n个字节后,文件记录指针将会后移n个字节。除此之外,RandomAccessFile还可以自由移动该记录指针。下面就是RandomAccessFile具有的两个特殊方法,来操作记录指针,实现随机访问。
long getFilePointer( ):返回文件记录指针的当前位置
void seek(long pos ):将文件指针定位到pos位置
c10k问题
版权声明:
本站所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自
幽林萌逐的blog!
喜欢就支持一下吧