-9

私はファイル転送プログラムを作成していましたが、作成したこの 800kb のテスト画像を送信するのに永遠にかかります。明らかに、1 メガバイトのデータごとに 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 です。

また、readChars() および readChar() で Readers および readLine() を使用しようとしましたが、これはほぼ同じことと同等のようです。

4

1 に答える 1

8

一度に 1 バイトずつファイルを読み取り、一度に 1 バイトずつネットワーク経由で送信すると、どの言語でも遅くなります :)

読み取りには BufferedInputStream を使用し、書き込みにはBufferedOutputStreamを使用することを検討してください。

于 2013-10-22T04:14:30.960 に答える