我可以让 Java 跑得更快吗? [关闭]

Posted

技术标签:

【中文标题】我可以让 Java 跑得更快吗? [关闭]【英文标题】:Can I make Java go faster? [closed] 【发布时间】: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 【参考方案1】:

一次读取一个字节的文件并通过网络一次发送一个字节在任何语言中都会很慢:)

考虑使用BufferedInputStream 进行阅读,使用BufferedOutputStream 进行写作。

【讨论】:

+1 是建设性的,而不是“JAVA AINT SLOW AND YOU SHOULD FEEL BAD”。 谢谢,我会试一试。我也会 +1,但因为我对“初学者”问题投了反对票,所以我没有代表 >.>

以上是关于我可以让 Java 跑得更快吗? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

是啥让 SPI 比 I2C 协议更快 [关闭]

让Python跑得更快

干掉讨厌的 CPU 限流,让容器跑得更快

原理解析:如何让 Join 跑得更快?

如何让JOIN跑得更快?

如何让JOIN跑得更快?