代码之家  ›  专栏  ›  技术社区  ›  Jing He

我们为什么要使用OutputStream。写入(字节[]b,int off,int len),而不是输出流。写入(字节[]b)?

  •  1
  • Jing He  · 技术社区  · 7 年前

    对不起,各位。这是一个Java初学者的问题,但我认为它将对许多Java学习者有所帮助。

    FileInputStream fis = new FileInputStream(file);
    OutputStream os = socket.getOutputStream();    
    byte[] buffer = new byte[1024];
    int len;
    while((len=fis.read(buffer)) != -1){
        os.write(buffer, 0, len);
    }
    

    上面的代码是FileSenderClient类的一部分,该类用于使用java将文件从客户端发送到服务器。io和java.net.Socket。

    os.write(buffer, 0, len)
    

    os.write(buffer)
    

    用另一种方式问这个问题:“OutputStream.write()”方法有“len”参数的意义是什么?

    2 回复  |  直到 7 年前
        1
  •  2
  •   user207421    7 年前
    while((len=fis.read(buffer)) != -1){
        os.write(buffer, 0, len);
    }
    

    因为您只想写入实际读取的数据。考虑输入包括以下内容的情况: 缓冲区加一个字节。没有 len 要写入的参数 (N+1)*1024 字节而不是 N*1024+1 InputStream.read() 它至少传输一个字节,

    这两种代码似乎都工作正常。

    不,他们不是。

        2
  •  -1
  •   Jing He    7 年前

    实际上,它的工作方式不同。

    很可能您使用了一个非常小的文本文件进行测试。但是如果你仔细看,你仍然会发现在你收到的文件的末尾有很多额外的空格,并且你收到的文件的大小比你发送的文件大。

    如果使用Notepad++或Sublime text等高级文本编辑器查看收到的文件,您将看到这些空字符。