ホームページ  >  記事  >  Java  >  ソケット経由でファイルを転送すると空のファイルが生成されるのはなぜですか?

ソケット経由でファイルを転送すると空のファイルが生成されるのはなぜですか?

Susan Sarandon
Susan Sarandonオリジナル
2024-11-09 18:20:02912ブラウズ

Why does my file transfer over sockets result in an empty file?

ソケットを介したファイル送信: データ交換の問題への対処

Java プログラミングでは、ソケットを介してファイルをバイト配列として送受信するときに問題が発生する可能性があります。このガイドは、クライアントとサーバー間のデータ転送プロセス中に空のファイルが作成されることを確認した開発者が直面した問題を解決することを目的としています。

サーバー構成

サーバーのタスククライアントからデータを受け取ることです。次のコード スニペットは、サーバーの機能の概要を示しています。

<code class="java">byte[] bytes = new byte[1024];

in.read(bytes);
System.out.println(bytes);

FileOutputStream fos = new FileOutputStream("C:\test2.xml");
fos.write(bytes);</code>

問題は、バイト配列に不完全なデータが含まれている fos.write(bytes) 行で発生します。これは、in.read(bytes) が配列にデータの一部のみを読み取るためです。

クライアント構成

クライアントの義務は、データをサーバーに送信することです。 。ただし、次のコード抜粋には不完全なアクションが含まれています:

<code class="java">//out.write(bytes);
System.out.println(bytes);</code>

out.write(bytes) 行がコメント アウトされているため、バイト配列内のデータがサーバーに書き込まれません。その結果、サーバーは空の配列を受け取り、空のファイルが作成されます。

解決策

この問題を解決するには、ストリームをコピーする正しい方法が必要です。 Java はバッファを利用し、読み取るデータがなくなるまで継続的にデータをバッファに読み取ります。次のコード部分は、このアプローチを示しています:

<code class="java">byte[] buffer = new byte[8192];
while ((count = in.read(buffer)) > 0) {
  out.write(buffer, 0, count);
}</code>

以上がソケット経由でファイルを転送すると空のファイルが生成されるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。