从DataInputStream读取int时的I / O不一致

时间:2016-05-03 09:58:19

标签: java datainputstream dataoutputstream

我有一个客户端 - 服务器拓扑,客户端要求在服务器上的当前工作目录中列出目录或文件,服务器会回复相应的信息。

查看客户端代码

controlSocket.writeByte(LSDIR);
int dirCount = controlSocket.readInt();
Map<String, Long> dirMap = new HashMap<>();

for (int i = 0; i < dirCount; i++) {
    dirMap.put(controlSocket.readString(), controlSocket.readLong());
}

和服务器代码

dir = new File(cwd);
output.writeInt(dir.listFiles(File::isDirectory).length);

for (File file : dir.listFiles(File::isDirectory)){
    output.writeUTF(file.getName());
    output.writeLong(file.lastModified());
}

现在,当我不更改服务器上的目录时,无论我多少次调用它,目录列表都可以正常工作。但是,如果我使用此客户端代码

controlSocket.writeByte(CD);
controlSocket.writeString(path);

和此服务器代码

String inputDir = input.readUTF();
if (inputDir.equals("..")) {
    cwd = cwd.substring(0, cwd.lastIndexOf("/"));
} else {
    cwd += "/" + inputDir;
}

目录列表运行但是从套接​​字读取的整数不是服务器发送的整数(例如,在服务器上我看到1被发送,但在客户端上读取的内容如16777216)。服务器没有问题地读取目录内容,因此这方面没有问题。

似乎数据I / O流不一致,否则我错过了某些东西。请注意,客户端和服务器都在同一台计算机上运行。

1 个答案:

答案 0 :(得分:0)

问题是服务器在更改目录后写了一个额外的确认布尔值,客户端将其作为整数读取。

所以这里的代码没有任何问题。