我遇到了一個奇怪的問題,我想知道如果有人有一個想法可能是什麼原因。我正在用FileInputStream讀取一個文件(一個472 KB的小exe文件),我打算髮送文件torugh RMI連接,我有一個想法,在那裏我可以顯示上傳的%根據我已經發送了多少槽與文件的總長度相比較。Java fileinputstream閱讀沒有.read()
首先,我在本地嘗試了它,但無法完成工作。這是一個例子,我在做什麼。
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()而是其他任何/ 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(緩衝區),outstreamC也會創建一個工作文件。
如果我一直運行直到列表的大小,或者直到「大小」等於我第一次輸入的時間,它無關緊要。有一些缺失,我無法弄清楚。
奇怪的是,outstreamB創建一個工作文件,但outstreamC不能,但他們使用完全相同的項目。
本來我打算每次在通過RMI連接進入第一個時候都通過「讀」和「緩衝區」,並在所有零件到達後將所有東西放在一起,但現在我的計劃是有點死。任何人都可能有一個想法,我怎麼能解決這個問題,或者實現類似的能夠發送文件槽RMI?
最好的問候, 米哈伊
但是然後outstreamC怎麼能工作,如果我把所有的東西都留在第二個而不改變,並且只改變布爾值爲 read = fileData2.read(buffer) – Dark
你說得對,我不得不調用buffer = new byte [8192]在循環中,感謝您的快速幫助和時間。仍然有點困惑,如果我只是交換循環的條件,那麼我的第二個循環如何工作? – Dark
@Dark我不明白這些問題。 – EJP