java - 两个输出流?

标签 java sockets io stream

我有以下代码,我试图创建两种不同类型的输出流。这似乎不起作用。创建两个输出流的正确方法是什么?具体来说,一个数据输出流和一个对象输出流?

connect();

try (DataOutputStream outputStream = new DataOutputStream(socket.getOutputStream())) {
    try (ObjectOutputStream objectOutputStream = new ObjectOutputStream(outputStream)) {

        outputStream.writeUTF("saveFile");
        outputStream.writeUTF(serverName);
        File fileToSave = new File(localName);
        byte[] fileContent = Files.readAllBytes(fileToSave.toPath());

        objectOutputStream.writeObject(fileContent);

        return true;
    }
} catch (IOException e) {
    return false;
} finally {
    disconnect();
}

进行一些调试后,输出流似乎无法正常工作。如果我只有两者之一,则将执行两个“writeUTF”语句。

如果我保留两个输出流,则消息永远不会到达服务器。

最佳答案

解决方案是将两个“writeUTF”语句移至第二个 try block 上方。

connect();

try (DataOutputStream outputStream = new DataOutputStream(socket.getOutputStream())) {
    outputStream.writeUTF("saveFile");
    outputStream.writeUTF(serverName);

    try (ObjectOutputStream objectOutputStream = new ObjectOutputStream(outputStream)) {

        File fileToSave = new File(localName);
        byte[] fileContent = Files.readAllBytes(fileToSave.toPath());

        objectOutputStream.writeObject(fileContent);

        return true;
    }
} catch (IOException e) {
    return false;
} finally {
    disconnect();
}

现在代码可以正确执行了。

关于java - 两个输出流?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48411387/

相关文章:

c++ - 从文件c++中将单个字符读入变量

java - 如果 ServerSocket 接受连接,它会继续等待进一步的请求吗?

Java FileReader 编码问题

java - 在 Windows 上安装 Protocol Buffer

C 中的客户端和服务器 send() 和 recv()

c - C 是否在幕后使用互斥锁处理 STDIN?

java - 不使用 CachedRowSetImpl.execute() 复制 ResultSet

javascript - JavaScript套接字连接到端口43(Whois)

Java Sockets - 将文件从客户端发送到服务器

java - 写入类资源是保存文件的好方法吗?