java 的io 和nio的简单读写
2016-02-16 17:07
441 查看
最近遇到多线程文件读取的问题。即把io和nio 简单比较一下:
贴出代码:
//io的读写操作
public static void testIO() throws IOException {
FileInputStream fins= null;
FileOutputStream fouts = null;
try {
File readFile = new File("F:/test/test111.txt");
fins = new FileInputStream(readFile);
File outFile = new File("F:/test/test222.txt");
fouts = new FileOutputStream(outFile);
byte[] bytes = new byte[1024];
while(fins.read(bytes)>0) {
fouts.write(bytes);
}
System.out.println("io操作完成");
}finally {
if (fins != null) {
fins.close();
}
if (fouts != null) {
fouts.close();
}
}
}
//nio 的读写操作
public static void testNio() throws IOException {
FileInputStream fins= null;
FileOutputStream fouts = null;
try {
File f = new File("F:/test/test111.txt");
fins = new FileInputStream(f);
FileChannel readChannel = fins.getChannel();
File outF = new File("F:/test/test222.txt");
fouts = new FileOutputStream(outF);
FileChannel writeChannel = fouts.getChannel();
ByteBuffer bb = ByteBuffer.allocate(1024);
while(true) {
bb.clear();
int i = readChannel.read(bb);
if (i ==-1) {
break;
}
bb.flip();
writeChannel.write(bb);
}
System.out.println("nio操作完成");
}finally {
if (fins != null) {
fins.close();
}
if (fouts != null) {
fouts.close();
}
}
}
Buffer,故名思意,缓冲区,实际上是一个容器,是一个连续数组。Channel提供从文件、网络读取数据的渠道,但是读取或写入的数据都必须经由Buffer。具体看下面这张图就理解了:
本来以为nio既然是新的io,那么速度肯定还快。其实不然:
摘录网友评论:
在 JDK 1.4 中原来的 I/O 包和 NIO 已经很好地集成了。 java.io.* 已经以 NIO 为基础重新实现了,所以现在它可以利用 NIO 的一些特性。例如, java.io.* 包中的一些类包含以块的形式读写数据的方法,这使得即使在更面向流的系统中,处理速度也会更快。
1.4后的IO经过了集成。所以NIO的好处,集中在其他特性上,而非速度了:
1、分散与聚集读取
2、文件锁定功能
3、网络异步IO
贴出代码:
//io的读写操作
public static void testIO() throws IOException {
FileInputStream fins= null;
FileOutputStream fouts = null;
try {
File readFile = new File("F:/test/test111.txt");
fins = new FileInputStream(readFile);
File outFile = new File("F:/test/test222.txt");
fouts = new FileOutputStream(outFile);
byte[] bytes = new byte[1024];
while(fins.read(bytes)>0) {
fouts.write(bytes);
}
System.out.println("io操作完成");
}finally {
if (fins != null) {
fins.close();
}
if (fouts != null) {
fouts.close();
}
}
}
//nio 的读写操作
public static void testNio() throws IOException {
FileInputStream fins= null;
FileOutputStream fouts = null;
try {
File f = new File("F:/test/test111.txt");
fins = new FileInputStream(f);
FileChannel readChannel = fins.getChannel();
File outF = new File("F:/test/test222.txt");
fouts = new FileOutputStream(outF);
FileChannel writeChannel = fouts.getChannel();
ByteBuffer bb = ByteBuffer.allocate(1024);
while(true) {
bb.clear();
int i = readChannel.read(bb);
if (i ==-1) {
break;
}
bb.flip();
writeChannel.write(bb);
}
System.out.println("nio操作完成");
}finally {
if (fins != null) {
fins.close();
}
if (fouts != null) {
fouts.close();
}
}
}
Buffer,故名思意,缓冲区,实际上是一个容器,是一个连续数组。Channel提供从文件、网络读取数据的渠道,但是读取或写入的数据都必须经由Buffer。具体看下面这张图就理解了:
本来以为nio既然是新的io,那么速度肯定还快。其实不然:
摘录网友评论:
在 JDK 1.4 中原来的 I/O 包和 NIO 已经很好地集成了。 java.io.* 已经以 NIO 为基础重新实现了,所以现在它可以利用 NIO 的一些特性。例如, java.io.* 包中的一些类包含以块的形式读写数据的方法,这使得即使在更面向流的系统中,处理速度也会更快。
1.4后的IO经过了集成。所以NIO的好处,集中在其他特性上,而非速度了:
1、分散与聚集读取
2、文件锁定功能
3、网络异步IO
相关文章推荐
- java对世界各个时区(TimeZone)的通用转换处理方法(转载)
- java-注解annotation
- java-模拟tomcat服务器
- java-用HttpURLConnection发送Http请求.
- java-WEB中的监听器Lisener
- Android IPC进程间通讯机制
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- 介绍一款信息管理系统的开源框架---jeecg
- 聚类算法之kmeans算法java版本
- java实现 PageRank算法
- PropertyChangeListener简单理解
- c++11 + SDL2 + ffmpeg +OpenAL + java = Android播放器
- 插入排序
- 冒泡排序
- 堆排序
- 快速排序
- 二叉查找树