gpt4 book ai didi

Java fileinputstream 读取而不使用 .read()

转载 作者:行者123 更新时间:2023-12-02 09:21:24 24 4
gpt4 key购买 nike

我遇到了一个奇怪的问题,我想知道是否有人知道原因是什么。我正在使用 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 fileinputstream 读取而不使用 .read(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13203656/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com