1

サーバーが最初にファイルサイズとファイルデータを送信する場合があります。クライアント側で読み取るときに整数値とファイルデータの両方を区別するにはどうすればよいですか?

サーバーの同じコード(osはbufferedoutputstreamです):

            // Construct a 1K buffer to hold bytes on their way to the socket.
            byte[] mybytearray = new byte[(int) myFile.length()];

          //File Size
            os.write((int) myFile.length());

    FileInputStream fis = null;
    System.out.println("test+sendbytes");
    // Copy requested file into the socket's output stream.
      try {
          fis = new FileInputStream(myFile);
      } catch (FileNotFoundException ex) {
          // Do exception handling
      }
      BufferedInputStream bis = new BufferedInputStream(fis);

      try {
          bis.read(mybytearray, 0, mybytearray.length);
          os.write(mybytearray, 0, mybytearray.length);
          os.flush();
          os.close();
          os.close();

          // File sent, exit the main method
          return;
      } catch (IOException ex) {
          // Do exception handling
      }
4

1 に答える 1

1

intすべてのファイルの長さが255バイト以下であると想定している場合を除き、長さをとして書き込む必要があります。DataOutputStream.writeInt()を試してください

読むためにあなたは注文を想定しなければなりません。つまり、長さが最初に送信され、次にコンテンツが送信されると想定します。DataInputStream.readInt()を使用して長さを読み取ります。

于 2012-04-14T10:12:11.373 に答える