2017-05-21 5 views
1
  ObjectOutputStream oos = new ObjectOutputStream(c.getOutputStream()); 
      ObjectInputStream ois = new ObjectInputStream(c.getInputStream());     

      File file = new File("lol.txt"); 
      if(!file.exists()){ 
       file.createNewFile(); 
      }     

      byte[] textBytes; 
      while((textBytes = (byte[])ois.readObject()) != null){     
       Files.write(file.toPath(), textBytes);     
      } 
      //do stuff... 
      byte[] textBytes; 
      while((textBytes = (byte[])ois.readObject()) != null){     
       Files.write(file.toPath(), textBytes);     
      } 

サーバー上でファイルを複数回読み取るにはどうすればよいですか?このコードは動作しますか?最初のループチェックに邪魔されませんか?Javaのobjectinputstreamを使用してサーバーからファイルを複数回読み取る方法

サーバーは、次のようにクライアントにそれを書いています。それはベースのバッファ、バッファ内の現在の位置がどこにあるかを示すためにdescriptorを使用して、実装をブロックであるため

   byte[] fileBytes = Files.readAllBytes(fp.toPath()); 
       oos.writeObject(fileBytes); 
       oos.flush(); 
+0

は、Java 'のインスタンスはC::

あなたのサーバクライアント通信は、このよう ( - - >サーバー、C>クライアントは、S、私は次の略語を使用)でなければなりません。 net.Socket'?そして、サーバーのソケットに接続された 'ObjectOutputStream'? – fireandfuel

+0

はいcはjava.net.Socketのインスタンスで、oosはサーバーに接続されています。 –

+0

NBあなたの読み取りループが無効です。 'readObject()'はストリームの最後にnullを返しません。あなたがnullを書いたときはいつでもそれを行うことができます。 'EOFException'をキャッチする必要があります。 – EJP

答えて

0

ソケットのInputStreamに反復可能読み取りは、不可能です。

あなたはInputStreamdescriptor移動あなたが読んでいるバイトの量から読み取ります。読み取りバイトは多分すでに新たな受信バイトで上書きので、前の位置へdescriptorを巻き戻すことはできません。

C: Request file from S 
S: Send file to C 
C: Request file from S 
S: Send file to C 
(and so on) 
関連する問題