Java中是否存在一种有效的机制,用于在低端机器上的磁盘和网络之间来回传输大量数据(~10 GB)?低端机器意味着主机内存小于10 GB的机器。我想有效地将一个文件的~10GB部分从一台机器传输到另一台机器。
答案 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)
答案 3 :(得分:-2)
传统的套接字和文件io会很好。
在java 6中,据我所知,没有直接的文件套接字io优化。即使有,正如java 7中所传言的那样,它也不会提高性能。您的代码将是磁盘绑定或网络绑定。 mem副本无关紧要。