【发布时间】:2012-11-03 06:14:23
【问题描述】:
我遇到了一个奇怪的问题,我想知道是否有人知道可能是什么原因。我正在使用 FileInputStream 读取一个文件(一个 472 KB 的小 exe),我计划通过 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,我收到一条错误消息: “此文件的版本与您运行的 Windows 版本不兼容...”。
这就是我尝试的方式:
//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(buffer),outstreamC 也会创建一个工作文件。
如果我运行 for 直到列表的大小,或者直到等于我输入第一个 while 的时间的“大小”,这并不重要。少了点什么,我想不通。
奇怪的是,outstreamB 创建了一个工作文件,而 outstreamC 不能,但它们使用完全相同的项目。
本来我打算每次通过RMI连接进入第一个时通过“读取”和“缓冲区”,然后在所有部件到达后将所有东西放在另一边,但现在我的计划有点死了.任何人都可能有一个想法,我该如何解决这个问题,或者实现类似的东西以便能够通过 RMI 发送文件?
最好的问候, 米哈莉
【问题讨论】:
标签: java file fileinputstream fileoutputstream