Jay*_*esh 3 java io nio java-ee
我是Java NIO的新手,没有动手.关于Java NIO我知道它比java.IO快.
所以,只是试一试,我想到编写简单的程序"将一个文件的内容复制到另一个文件"."从大文件中搜索一个单词".
同时使用java.io和java.nio包.
另外,我分别在操作开始和结束之前和之后打印时间.
我没有发现任何差异,因为NIO更快.我可能会走错方向.
任何人都可以引导我通过我可以通过示例正确看到差异的场景吗?
编辑:
我很惊讶地知道这个问题会得到反对票.我已经提到我是NIO的新手并指导我,如果我走向错误的方向.我没有发布一个程序,因为它是非常基本的读写操作...请参阅下面我用来测试的程序....
使用IO
public static void copyFile(File in, File out) throws Exception {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS");
Date now = new Date();
String strDate = sdf.format(now);
System.out.println("Before Read :"+strDate);
FileInputStream fis = new FileInputStream(in);
FileOutputStream fos = new FileOutputStream(out);
try {
byte[] buf = new byte[1024];
int i = 0;
while ((i = fis.read(buf)) != -1) {
fos.write(buf, 0, i);
}
}
catch (Exception e) {
throw e;
}
finally {
if (fis != null) fis.close();
if (fos != null) fos.close();
}
Date now1 = new Date();
String strDate1 = sdf.format(now1);
System.out.println("After Read :"+strDate1);
}
Run Code Online (Sandbox Code Playgroud)
使用NIO
public static void copyFile(File in, File out)
throws IOException
{
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS");
Date now = new Date();
String strDate = sdf.format(now);
System.out.println("Before Read :"+strDate);
FileChannel inChannel = new
FileInputStream(in).getChannel();
FileChannel outChannel = new
FileOutputStream(out).getChannel();
try {
inChannel.transferTo(0, inChannel.size(),
outChannel);
}
catch (IOException e) {
throw e;
}
finally {
if (inChannel != null) inChannel.close();
if (outChannel != null) outChannel.close();
}
Date now1 = new Date();
String strDate1 = sdf.format(now1);
System.out.println("After Read :"+strDate1);
}
Run Code Online (Sandbox Code Playgroud)
我从一个文件复制到另一个文件的文件大约是20 MB.
NIO允许您仅使用一个(或更少)线程来管理多个通道,但成本是解析数据可能比使用标准IO从阻塞流读取数据时更复杂一些.
如果您需要同时管理数千个打开的连接,每个只发送一些数据,例如聊天服务器,在NIO中实现服务器可能是一个优势.同样,如果您需要与其他计算机保持大量开放连接,例如在P2P网络中,使用单个线程来管理所有出站连接可能是一个优势.
如果您拥有较少带宽的连接,一次发送大量数据,则应该选择标准IO服务器实现.
| 归档时间: |
|
| 查看次数: |
7147 次 |
| 最近记录: |