我正在使用Java进行一些套接字编程,我希望能够在同一个套接字中使用ObjectOutputStream
,DataOutputStream
和PrintWriter
之间进行更改/连接。这是可能的,最好的方法是什么?
我尝试过只创建两种类型的对象,例如ObjectOutputStream
和DataOutputStream
,但这似乎不起作用。
我想在它们之间切换的原因是,例如,发送一个文本命令"INFO"
,表示我将发送一个带有信息的对象或一个命令"DATA"
发出信号'我'我即将发送数据。任何有关最佳方法的建议都表示赞赏。
答案 0 :(得分:2)
您只能使用一种基础流类型,但您可以从任何地方获取该数据。
DataOutputStream dos = new DataOutputStream(new BufferedOutputStream(s.getOutputStream()));
public static void writeObject(DataOutputStream dos, Serializable obj) {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
ObjectOutputStream oos = new ObjectOutputStream(baos);
oos.writeObject(obj);
oos.close();
dos.writeUTF("OBJECT");
byte[] bytes = baos.toByteArray();
dos.writeInt(bytes.length);
dos.write(bytes);
dos.flush();
}
public static void writeBytes(DataOutputStream dos, byte[] bytes) {
dos.writeUTF("BYTES");
dos.writeInt(bytes.length);
dos.write(bytes);
dos.flush();
}
public static void writeText(DataOutputStream dos, String text) {
dos.writeUTF("TEXT");
dos.writeUTF(text);
dos.flush();
}
答案 1 :(得分:1)
为什么您希望*Stream
转换为*Writer
。
您可以使用*Stream
执行您想要的操作。
Socket s = new Socket();
DataOutputStream stream = new DataOutputStream( s.getOutputStream() );
byte[] bytes = "INFO".getBytes();
stream.write(bytes);
//....
bytes = "DATA".getBytes();
stream.write(bytes);