有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java使用公共缓冲区读取inputstream并写入outputstream

我从网络socket的输入流读取到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);阻塞

以下是从DDMS的线程调试工具中获取的

The image showing below quoted contents in DDMS thread viewer

  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());   

提前谢谢


共 (1) 个答案

  1. # 1 楼答案

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