有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

socket中InputStream/OutputStream的java奇怪行为

和往常一样,我在流和socket方面遇到了麻烦

这是我的代码:

客户

bitOut.write((f.getName() + "\n").getBytes());
//System.out.println(f.length()); // <- This is the odd part.
bitOut.write((int) f.length());
bitOut.flush();

fileIn = new FileInputStream(f);
byte buffer[] = new byte[BUFFER_SIZE];
int len;
while ((len = fileIn.read(buffer)) != -1) {
    bitOut.write(buffer, 0, len);
}
fileIn.close();

服务器

file = sc.nextLine();
int fileSize = bitIn.read(); // <- Here is my error!
System.out.println(file + ", " + fileSize);

fileOut = new FileOutputStream(folder + file);
byte buffer[] = new byte[BUFFER_SIZE];
int len;
while (fileSize > 0 && (len = bitIn.read(buffer)) != -1) {
    fileOut.write(buffer, 0, len);
    fileSize -= len;
    System.out.println(fileSize);
 }
 fileOut.close();

如果我在客户机代码中取消对System.out.println(f.length())的注释,服务器总是在fileSize中获得正确的值。但是如果我留下注释,fileSize通常是数据的一个字节,应该在f.length()之后发送。一方面,这很有趣,因为几乎只有当我在客户端打印出文件大小时,我才能在服务器上收到正确的结果。另一方面,我不知道如何修复它


共 (1) 个答案

  1. # 1 楼答案

    好吧,我解决了。这与扫描仪有关,它的方法nextLine()吞下了我在文件名后面发送的字节。现在我只使用普通的InputStreamOutputStream