java使用公共缓冲区读取inputstream并写入outputstream
我从网络socket的输入流读取到buffer
count = input.read(buffer)
然后在下一行中,我将使用
str = new String(buffer,0,count);
Log.e("str",str);
然后我试着把它写到一个PipedInputStream
的PipedOutputStream
pipedOutputStream .write(buffer);
在哪里,
pipedOutputStream = new PipedOutputStream(pipedInputStream)
问题是线程在pipedOutputStream .write(buffer);
阻塞
以下是从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());
提前谢谢
# 1 楼答案
看看JavaDoc。在这里您可以看到:“不建议尝试从单个线程使用两个对象”。通常,您需要另一个线程来尝试读取一些数据