0

ファイルを受信するためにクライアント側で助けを求めます。可変入力レコードのファイル名。Inputstream の「is」と FileOutputStream の「bos」は、ファイルの保存を担当します。最初のファイルは配信されますが、他の受信ファイルは変数名で java.lang.NullPointerException が発生します。ファイルを作成するためにこのループを処理するにはどうすればよいですか。入力変数にはファイルの次の新しい名前が含まれ、ストリームは「is」になります新しいデータが含まれていますか?ファイル poison.pill は、送信の終了を通知します。

public class Receiver implements Runnable {


    private int port;

    public Receiver(int port) {

        this.port = port;

    }

    @Override
    public void run() {
        Socket socket = null;
        BufferedOutputStream bos = null;
        try {
            InetAddress adresa = InetAddress.getByName("localhost");

            System.out.println("klient sa pripaja na adresu: " + adresa);
            socket = new Socket(adresa, this.port);

            System.out.println("socket = " + socket);
            while (true) {
                BufferedReader input = new BufferedReader(
                        new InputStreamReader(socket.getInputStream()));
                String name = input.readLine();
            /// while (???????) {}



                if (name.equals("poison.pill")) {// null pointer exception

                    bos.close();
                    socket.close();
                    break;
                }

                int filesize = 1400;

                int bytesRead;
                byte[] bytearray = new byte[filesize];
                InputStream is = socket.getInputStream();
                FileOutputStream fos = new FileOutputStream(name);
                bos = new BufferedOutputStream(fos);

                while ((bytesRead = is.read(bytearray)) != -1) {
                    bos.write(bytearray, 0, bytesRead);
                    bos.flush();
                }

            }



        } catch (UnknownHostException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

}

誤解がある場合は、説明します。

4

1 に答える 1

0

よくわからないかもしれませんが、何がしたいのですか?あなたのコードを見ると、あなたは見ることができます

  1. inputStream から行を読み取る -> fileNameinput.readLine()
  2. すべて読む!!!! 入力ストリームからのデータwhile ((bytesRead = is.read(bytearray)) != -1) {-1 はストリームが空であることを意味します
  3. ループがスターになり、行(p1)を読み取ろうとした後、はい、ストリームは空(p2)で、NullPointer.

解決策、ストリーミングするデータが到着するまで待ちます...

于 2013-02-07T02:04:53.047 に答える