有 Java 编程相关的问题?

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

多线程java从更多线程接收并连接文件

我有个问题。我想在4个socket中发送文件,其中每个socket都与1个线程连接。我使用的协议是TCP。我认为当我发送文件时,我会以良好的顺序在socket上发送它。但我在接收字节并尝试将其连接到文件的一侧遇到了问题。 这是我从socket接收字节的线程代码

long i = fromIdx;
         //file.seek(fromIdx);
         while (i < fromIdx+partLen) {
            int arrSize = ((i + 1000 > fromIdx+partLen) ? (int)(fromIdx+partLen-i) : 1000);
            byte[] data = new byte[arrSize];
            input.read(data);

            synchronized(file) {
                System.out.println(i);
                file.seek(i);
                file.write(data);
                //fromIdx = file.getFilePointer();
                i += arrSize;
            }

        }

文件的类型为RandomAccessFile。主要问题是结果中的某些字节是零。我认为其他的都很好。我真的不知道问题出在哪里。当seek将文件指针设置在不应该的位置时,可能会出现一些同步问题,但我真的不知道

谢谢你的回答


共 (1) 个答案

  1. # 1 楼答案

    ^{}的文档中:

    Reads up to len bytes of data from the input stream into an array of bytes. An attempt is made to read as many as len bytes, but a smaller number may be read. The number of bytes actually read is returned as an integer.

    您应该始终使用chceck返回值read,因为无法保证(对于TCP套接字,甚至不是典型的)读取预期的字节数