Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/313.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 文件分割数据丢失_Java_File Io - Fatal编程技术网

Java 文件分割数据丢失

Java 文件分割数据丢失,java,file-io,Java,File Io,我写了一个文件分割和连接程序。当我将文件分成小块时,我发现较小文件的大小不等于原始文件的大小,大约会丢失30-50字节的数据。并且组合文件不能正确运行 e、 g.ABC文件已分为两部分,ABC1和ABC2,但问题是 sizeof(ABC)不等于sizeof(ABC1)+sizeof(ABC2)。通过sizeof(ABC)我的意思是从Windows的角度,即从Windows属性对话框 我的代码是: for(int i =0;i<no_of_parts;i++) { copied

我写了一个文件分割和连接程序。当我将文件分成小块时,我发现较小文件的大小不等于原始文件的大小,大约会丢失30-50字节的数据。并且组合文件不能正确运行

e、 g.ABC文件已分为两部分,ABC1ABC2,但问题是
sizeof(ABC)
不等于
sizeof(ABC1)
+
sizeof(ABC2)
。通过
sizeof(ABC)
我的意思是从Windows的角度,即从Windows属性对话框

我的代码是:

for(int i =0;i<no_of_parts;i++)
{
       copied_data = 0;// a variable that count the no of byte transferred in the part of file
       fos = new FileOutputStream(jTextField2.getText()+"\\".part"+i);
       bouts = new BufferedOutputStream(fos);
       while((b = bins.read())!= -1)
       {
             bouts.write(b);
             copied_data++;
             if(copied_data==each_part_size_in_byte)
                break;
       }
}

用于(int i=0;i当您创建文件时,它是在内存块中而不是在单个字节中创建的。因此,当您将文件分成两部分时,它们的大小都在固定块中,可能大于您写入数据的实际大小。

当您创建文件时,它是在内存块中而不是在单个字节中创建的。因此,当您将文件一分为二,两个文件都有固定块大小,可能超过写入数据的实际大小。

关闭输出流怎么样?它将刷新缓冲区并释放您使用的文件描述符。Call
bouts.close()

关闭输出流怎么样?它将刷新缓冲区并释放您使用的文件描述符。调用
bouts.close()

但我的实际大小大于碎片文件大小。即数据正在丢失。但我的实际大小大于碎片文件大小。即数据正在丢失。我添加了此bouts.close()在我的代码中,但仍然存在相同的问题,当我加入我的文件时,它不会运行,数据仍然丢失。我可以看看你在哪里添加它吗?还要添加文件加入的代码。使用close()时,我需要添加flush(),然后它就可以工作了。谢谢
close()
始终调用
flush()
为您。您必须始终关闭在链中创建的最外层/最后一个流。如果您关闭文件而不是缓冲区,则所有缓冲数据都将丢失。我添加了此选项。close()在我的代码中,但仍然存在相同的问题,当我加入我的文件时,它不会运行,数据仍然丢失。我可以看看你在哪里添加它吗?还要添加文件加入的代码。使用close()时,我需要添加flush(),然后它就可以工作了。谢谢
close()
始终调用
flush()
为您。您必须始终关闭在链中创建的最外层/最后一个流。如果关闭文件而不是缓冲区,则所有缓冲数据都将丢失。