2012-09-05 51 views
0

想知道一个能做到这样的成功的东西:Java:可能有多种类型的流?

Socket s = new Socket("", 1234); 
BufferedInputStream in = new BufferedInputStream(s.getInputStream()); 
BufferedOutputStream out = new BufferedOutputStream(s.getOutputStream()); 
ObjectInputStream oin = new ObjectInputStream(s.getInputStream()); 
ObjectOutputStream out = new ObjectOutputStream(s.getOutputStream()); 

或者,如果有也许做的更好的方法。我问,因为我想通过缓冲I/O流发送原始数据,并使用对象流作为通信细节和为我的程序建立连接的协议。现在我试图只使用缓冲流,并使用byte阵列用于我的客户端/服务器协议,但是我遇到了打嗝的地方,我收到的byte阵列与我期望的阵列不相等,因此==运算符和.equals()方法不适合我。

+0

你试过了吗?你有什么问题吗? – kosa

+0

@Nambari我以前在一个不同的项目上尝试过这种方法,但效果不好。在我走之前我来这里问是否有这些情况下的最佳做法,并搞砸了我的项目。 – Logan

回答

3

你不能使用混合的流,因为它们都被缓冲,所以你会得到腐败和混乱。

只需使用ObjectStreams即可。

一般而言,您只应读取或写入一个Stream,Reader或Writer以获取流。

+0

这就是我想知道的。在这种情况下,是否可以通过ObjectStream流式传输从文件中读取的数据?我看到它有一个'write(byte [])'方法,它的工作方式与BufferedStreams相同吗? – Logan

+0

您可以使用ObjectStream的所有方法,只需确保您读取了您写入的对象,并且您读取了与写入的数据相同的数据(字节[])即可。如果你把这些混在一起,你们都会腐败。您可以发送像writeInt(长度)这样的标志,并且如果长度是负数,它就是一个Object。 –