ソケットを使用してサーバーから45 MBのファイルをダウンロードしています。私のシステムのトラフィックを測定すると、約4MB/sのダウンロード速度を示しますが、Javaでは60KBしか測定しません。サーバーからクライアントへファイルを転送する速度が非常に遅い
クライアント両面:
int fileSize = Network.in.readInt(); //DataInputStream
byte[] data = new byte[fileSize];
for(int i = 0;i < data.length;i++)
{
if(i % 1024 == 0)Log.info("Downloading: " + (i/1024) + " KB/" + (fileSize/1024) + " KB");
data[i] = Network.in.readByte();
}
//int bytesRead = Network.in.read(data,0,data.length);
//int current = bytesRead;
//
//do {if(current % 16384 == 0)Log.info("Downloading: " + (current/1024) + " KB/" + (fileSize/1024) + " KB");
// bytesRead = Network.in.read(data, current, (data.length-current));
// if(bytesRead >= 0) current += bytesRead;
//} while(bytesRead > -1);
サーバー両面:
out.writeInt(data.length); //DataOutputStream
//for(int i = 0;i < data.length;i++)
//{
// out.writeByte(data[i]);
//}
out.write(data, 0, data.length);
コメントアウトされている代替手段を使用するには全く違いはありません。
を行うことができます
readFully
を使用して...と? –
受信したバイトの現在の数をループに出力するだけです。 – Geosearchef
私のロギングシステムは現在の時刻を表示するので、1秒間にどれだけダウンロードされたかを計算できます。 45 MBをダウンロードするのに約13〜14分かかるため、ダウンロード速度も約60 kB/sになります。 – Geosearchef