Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/334.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java ObjectOutputStream和PrintWriter冲突_Java - Fatal编程技术网

Java ObjectOutputStream和PrintWriter冲突

Java ObjectOutputStream和PrintWriter冲突,java,Java,我已经设置了服务器和客户端,这基本上是一个基本的文本电子邮件系统。我目前正在使用PrintWriter在服务器和客户端之间发送文本。我正在尝试创建一个基于附件的系统,为此我使用了ObjectOutputStream private static PrintWriter output; private static ObjectOutputStream outStream; public ClientHandler(Socket socket) throws IOException {

我已经设置了服务器和客户端,这基本上是一个基本的文本电子邮件系统。我目前正在使用PrintWriter在服务器和客户端之间发送文本。我正在尝试创建一个基于附件的系统,为此我使用了ObjectOutputStream

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