【发布时间】:2013-10-30 18:47:39
【问题描述】:
我正在制作一个文件传输程序,它需要很长时间才能传输我制作的这张 800kb 测试图片。显然我不想为每 mb 的数据花费 30 分钟,所以我很好奇是否有任何方法可以加速我的代码或 Java。我听说过分配额外的 RAM,但从未研究过。
如果有人能为我的代码找到更好的算法,我将不胜感激,否则我可能不得不转向 C++ 或 C 再试一次。
服务器代码块:
if(file.exists()){
for(long l=0;l<file.length();l++){
out.writeByte(fIS.read());
}
}
其中 fIS 是 FileInputStream,out 是传出 DataOutputStream。其余代码基本上是发送长度和一个标志,但如果需要,我可以添加。
客户代码:
b = new byte[len];
for(int x=0;x<len;x++){
b[x] = dIS.readByte();
}
fOS.write(b);
其中 len 是预期从服务器读取的文件长度,b 是构成文件的字节数组,dIS 是来自服务器的输入流,fOS 是 FileOutputStream。
我也刚刚尝试将 Readers 和 readLine() 与 writeChars() 和 readChar() 一起使用,但这似乎等同于同一件事。
【问题讨论】:
-
尝试写入字节数组而不是单个字节。还要查看网络数据包/流量大小,了解您应该尝试使用的缓冲区大小。看看Basic I/O
-
“所以我知道 Java 是一种慢速语言”[需要引用]
-
(i) Java 并不慢,(ii) 您的程序受 I/O 限制,因此语言大多无关紧要 - 重要的是您如何使用 I/O 库。
-
如果您的 Java 代码比相同的 C++ 代码慢很多,那么您肯定做错了什么。 Java 并不慢,你的代码是。
-
有人敢说Java慢。 :O
标签: java networking