Java套接字文件发送

标签 java sockets stream

我正在使用 java 套接字编写客户端/服务器。这是我的代码:

服务器:

public void sendFile(File file) {
    BufferedOutputStreambufferedOutputStream = new BufferedOutputStream(socket.getOutputStream());
    int count;
    FileInputStream in;
    try {
        in = new FileInputStream(file);
        byte[] mybytearray = new byte[(int) file.length()];
        while ((count = in.read(mybytearray)) > 0) {
            bufferedOutputStream.write(mybytearray, 0, count);
        }
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

}

客户:

public void downloadFile() {
    BufferedInputStream bufferedInputStream = new BufferedInputStream(socket.getInputStream());
    byte[] aByte = new byte[8192];
    int count;
    FileOutputStream in;
    try {
        in = new FileOutputStream("C://fis.txt");
        while ((count = bufferedInputStream.read(aByte)) > 0) {
        System.out.println(count); // <- nothing happens
            in.write(aByte, 0, count);
        }
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

}

为什么第二个函数中的 bufferedInputStream 为空?

最佳答案

BufferedOutputStream 在缓冲区已满之前不会写入数据。您需要刷新OutputStream:

bufferedOutputStream.flush();

关于Java套接字文件发送,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15745772/

相关文章:

java - 编译后从字节码中删除注释

java - java.net.Socket 中的 Apache Mina 服务器和客户端

node.js - Socket.io 失败 : WebSocket is closed before the connection is established

android - 如何在VideoView中播放这个视频?

c - 无法让我的代理服务器向客户端发送http请求的信息 - Socket编程

flutter - Flutter服务器端事件,响应式(Reactive)UI

java - Android 为跨文本添加填充

java - "manually"是否可以在 Java 中创建 java.lang.Method 的实例?

java - 生成事件、Swing

c - 套接字服务器不接受来自其他计算机的客户端(连接失败 : 10060)