通过Java中的I / O进行高效的批量数据传输

时间:2010-07-09 19:02:33

标签: java file file-io io

Java中是否存在一种有效的机制,用于在低端机器上的磁盘和网络之间来回传输大量数据(~10 GB)?低端机器意味着主机内存小于10 GB的机器。我想有效地将​​一个文件的~10GB部分从一台机器传输到另一台机器。

4 个答案:

答案 0 :(得分:1)

Java中最有效的I / O方式是NIO库。如果您的数据合适,应用压缩流过滤器也会有所帮助。

答案 1 :(得分:1)

我认为您只需将InputStream复制到OutputStream即可。我开始使用其他人的实现commons-io:IOUtils.copyLarge(InputStream,OutputStream)

InputStream is = null;
OutputStream os = null;
try{
    InputStream is = new FileInputStream("yourfile.bin");
    OutputStream os = remoteSocket.getOutputStream();
    IOUtils.copyLarge(is,os);
}finally{
    IOUtils.closeQuietly(is);
    IOUtils.closeQuietly(out);
}

对于十岁来说,这应该是一个很好的首发。如果您需要更高的吞吐量,您可以开始将读取和写入操作放在单独的线程中,理论上这应该确保您完全饱和最慢的链接,但如果使用FileChannel#transferTo方法可能是更好的选择。使用传统的东西是不够的。

答案 2 :(得分:0)

仅供参考,transferTo()仅在文件之间进行优化,而不是文件套接字,在java 6中

答案 3 :(得分:-2)

传统的套接字和文件io会很好。

在java 6中,据我所知,没有直接的文件套接字io优化。

即使有,正如java 7中所传言的那样,它也不会提高性能。您的代码将是磁盘绑定或网络绑定。 mem副本无关紧要。