没有.read()的Java fileinputstream读取

时间:2012-11-02 22:04:27

标签: java file fileinputstream fileoutputstream

我遇到了一个奇怪的问题,我想知道是否有人知道可能是什么原因。我正在使用FileInputStream读取文件(一个472 KB的小exe),我打算发送文件torugh RMI连接,我有一个想法,我可以根据如何显示上传的%与文件的整体长度相比,我已经发送了很多东西。

首先我在当地试了一下,但是我无法让它发挥作用。这是一个例子,我在做什么。

FileInputStream fileData = new FileInputStream(file);
reads = new ArrayList<Integer>();
buffers = new ArrayList<byte[]>();
int i = 0;
while ( (read = fileData.read(buffer)) > 0) {
      System.out.println("Run : " + (i + 1));
      outstreamA.write(buffer, 0, read);
      reads.add(read);
      buffers.add(buffer);
      outstreamB.write(this.buffers.get(i), 0, this.reads.get(i));
      i = i + 1;
}

这两个FileOutputStream创建了两个文件(只是名称相同的文件),工作正常。但是,当我没有使用fileData.read()但是其他任何for / while时,它只是工作了。它创建完全相同的文件(长度完全相同)但我的窗口无法运行exe,我收到一条错误消息: &#34;此文件的版本与您正在运行的Windows版本不兼容......&#34;。

这是我尝试的方式:

//for (int i = 0; i < buffers.size(); ++i) {
  i = 0;
//while ( (read = fileData2.read(buffer)) > 0) {
  while ( i < size) {
      System.out.println("Run#2 : " + (i + 1));
      outstreamC.write(this.buffers.get(i), 0, this.reads.get(i));
      i = i + 1;
  }

fileData2与fileData相同。如果我使用fileData2.read(缓冲区),outstreamC也会创建一个工作文件。

如果我一直跑到列表的大小,或直到&#34;尺寸&#34;这是重要的。这等于我进入第一次的时间。有些东西缺失了,我无法弄清楚。

奇怪的是,outstreamB创建了一个工作文件,但outstreamC不能,但他们使用完全相同的项目。

最初我打算通过&#34;阅读&#34;和&#34;缓冲&#34;每次我通过RMI连接进入第一个,并在所有部件到达后将所有部件放在一起,但现在我的计划有点死了。任何人都有一个想法,我怎么能解决这个问题,或者通过RMI发现类似的东西?

祝你好运, 米哈里

1 个答案:

答案 0 :(得分:0)

您的代码永远无法运作。您正在重复读取相同的缓冲区并将相同的缓冲区添加到列表中。因此,该列表包含您阅读的最终数据的几个副本。每次循环时都需要分配一个新的缓冲区。