2012-11-06 34 views
0

当使用java拆分到不同的字节数组时,文件的应用程序不会呈现文件。即使原始文件和重新加入文件中的字节数相同,也会发生这种情况。关于使用Java进行文件拆分的问题

这里的目的是分割一个大文件分成不同字节数组和重新加入使用在网络上不同的编程语言(C#)这些字节数组。

,我已经为分裂编写的代码如下:

File f = new File(fileLoc); 
FileInputStream fi = new FileInputStream(f); 
int size = fi.available(); 

int MB2 = 1048576 * 2; 
int total = size/MB2; 
if (size % MB2 != 0) { 
    total += 1; 
} 
int ch; 

while (size > 0) { 
    int arraysize; 
    if (size < MB2) { 
     arraysize = size; 
    } else 
     arraysize = MB2; 
    byte bytes_read[] = new byte[arraysize]; 
    ch = fi.read(bytes_read, 0, arraysize); 
    // The byte_read is added to an array list of byte[] 
    // and send along with certain other parameters 
    size = size - ch; 
    count++; 
} 
fi.close(); 

回答

2

你有两个问题:

  • 你使用available(),以此来了解一个文件长度。这不是该方法的作用。 available()应该几乎不会被使用。我从来没有见过使用它的任何用例是一个好主意。
  • 您正在使用read()方法并忽略其返回的值。您可以使用它来对大小变量进行大小写转换,但是您不关心字节数组是否填充了读取字节或填充了零。不保证读取的字节数与您询问的字节数相同。

有可能是在字节通过网络发送和读取对方也像其他的错误。

+0

你能否建议一个替代阅读()? – nonexistential

+0

read()很好。只是不要忽略它的返回值。 –

+0

当读取返回'-1'你在EOF;使用它来测试EOF而不是“可用” – robert