Java ObjectOutputStream和PrintWriter冲突
我已经设置了服务器和客户端,这基本上是一个基本的文本电子邮件系统。我目前正在使用PrintWriter在服务器和客户端之间发送文本。我正在尝试创建一个基于附件的系统,为此我使用了ObjectOutputStreamJava ObjectOutputStream和PrintWriter冲突,java,Java,我已经设置了服务器和客户端,这基本上是一个基本的文本电子邮件系统。我目前正在使用PrintWriter在服务器和客户端之间发送文本。我正在尝试创建一个基于附件的系统,为此我使用了ObjectOutputStream private static PrintWriter output; private static ObjectOutputStream outStream; public ClientHandler(Socket socket) throws IOException {
private static PrintWriter output;
private static ObjectOutputStream outStream;
public ClientHandler(Socket socket) throws IOException
{
client = socket;
outStream = new ObjectOutputStream(client.getOutputStream());
input = new Scanner(client.getInputStream());
output = new PrintWriter(client.getOutputStream(), true);
}
我目前遇到的问题是,如果我尝试通过输出printwriter发送文本,由于某些原因,将在发送的文本的开头添加额外的字符,这意味着程序无法识别通过printwriter传递给客户端的关键字。如果我注释掉outStream对象的创建,问题将停止
有人能给我一些建议来解决这个冲突问题吗?
ObjectOutputStream
只能作为该频道上的ObjectOutputStream
使用。如果确实需要,请在另一个套接字上使用PrintWriter
此额外文本来自对象输出流
将ObjectOutputStream和PrintStream附加到同一个outputstream基本上是行不通的。你必须想出一个解决方案来使用1或其他。仅使用一个打印流,您可能会考虑将对象转换为JSON或XML。另一方面,您可以只使用ObjectOutputStream并将字符串写入ObjectOutputStream扩展ClientHandler并覆盖构造函数以包含用于处理文件传输的代码。打开两个端口,一个用于文本,另一个用于文件传输
private static PrintWriter output;
public ClientHandler(Socket socket) throws IOException
{
client = socket;
input = new Scanner(client.getInputStream());
output = new PrintWriter(client.getOutputStream(), true);
}
private static ObjectOutputStream outStream;
public ClientFileHandler(Socket socket) extends ClientHandler throws IOException
{
client = socket;
outStream = new ObjectOutputStream(client.getOutputStream());
}
许多人后来尝试/捕获。。。我决定单独使用ObjectOutputStream。谢谢你的快速回复。你能解释一下为什么使用这两个流不能工作吗?这是由于缓冲造成的吗?除非您准备在每次I/O后调用checkError(),然后准备忍受二进制错误状态而不是异常,否则永远不要使用
PrintWriter
或PrintStream
。