繁体   English   中英

使用公共缓冲区读取输入流并写入输出流

[英]Using a common buffer to read from inputstream and to write to outputstream

我从网络套接字的输入流读取到buffer

count = input.read(buffer)

然后在下一行中,我使用

str = new String(buffer,0,count);
Log.e("str",str);

然后我尝试将其写入PipedInputStreamPipedOutputStream

pipedOutputStream .write(buffer);

哪里,

pipedOutputStream = new PipedOutputStream(pipedInputStream)

问题是线程在pipedOutputStream .write(buffer);处阻塞pipedOutputStream .write(buffer);

下面是从DDMS的线程调试工具中确认,

下图显示了DDMS线程查看器中引用的内容

  at java.lang.Object.wait(Native Method)   
  at java.lang.Object.wait(Object.java:401) 
  at java.io.PipedInputStream.receive(PipedInputStream.java:394)    
  at java.io.PipedOutputStream.write(PipedOutputStream.java:176)    
  at java.io.OutputStream.write(OutputStream.java:106)  
  at java.io.PipedOutputStream.write(PipedOutputStream.java:147)    
  at java.io.OutputStream.write(OutputStream.java:82)   
  at com.example.Receiver.run(DRCReceiver.java:104)

任何人都可以告诉我,为什么以下命令不起作用( 阻止线程 )(将所有语句分组)

count = input.read(buffer)
str = new String(buffer,0,count);
Log.e("str",str);
pipedOutputStream .write(buffer);   

但是下面的工作( 不阻塞线程 )。

count = input.read(buffer)
str = new String(buffer,0,count);
Log.e("str",str);
pipedOutputStream .write(str.getBytes());   

提前致谢

看看JavaDoc 在这里您可以看到:“不建议尝试从单个线程使用两个对象”。 通常,您需要另一个尝试读取某些数据的线程。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM