有 Java 编程相关的问题?

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

javasocket文件传输未正确读取

当我收到文件时,它会将整个文件添加到“data”的0索引中。如何使接收到的文件的每一行都进入一个新的索引,基本上像我正在尝试的那样添加

public Downloader(Socket socket) {
    List<String> data = new ArrayList<String>();
    try {
        InputStream input = socket.getInputStream();
        byte[] buffer = new byte[socket.getReceiveBufferSize()];
        int bytesReceived = 0;
        while ((bytesReceived = input.read(buffer)) > 0) {
            String line = new String(buffer, 0, bytesReceived);
            if (line.trim().length() > 0) {
                data.add(line);
            }
        }
        Data.rawData = data;
        input.close();
        socket.close();
    } catch (Exception e) {
        e.printStackTrace();
    }
}

共 (1) 个答案

  1. # 1 楼答案

    整个文件进入data[0]的原因是因为您的整个文件小于socket.getReceiveBufferSize(),并且您对while循环进行了一次迭代。要按行拆分,请在while循环中使用BufferedReader并调用.readLine()

    这样做可以:

    BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
    String line = null;
    while (line = input.readLine()) != null) {
        data.add(line);
    }
    

    注意,您需要适当地添加try捕获以及您想要的任何其他逻辑