簡體   English   中英

用Java將二進制文件讀入ArrayList

[英]Reading a binary file into ArrayList in Java

我想在Java中讀取二進制文件。 我有153(1.bin,2.bin ... 153.bin)bin文件。 我必須閱讀。 我以為我必須使用ArrayList進行緩沖。 但是我做不到。 我怎樣才能做到這一點 ?

經過研究,我在標題中找到了這種方式( 將二進制輸入流讀入Java中的單字節數組 )。 此標題中有類似以下的代碼。

    StringBuilder sb = new StringBuilder();
    String fileName  = "/path/10.bin";
    byte[] buffer;

    try {

        buffer = Files.readAllBytes(Paths.get(fileName));

        for(byte b : buffer){

            sb.append(String.format("%02X ", b));
        }
        System.out.println(sb.toString());

    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

這是我提出問題的正確方法還是必須使用Arraylist進行緩沖? 如果我使用單字節數組進行緩沖,則必須清除其他二進制文件的緩沖區。

編輯:153單位表示153文件(1.bin,2.bin ... 153.bin)

您的問題不清楚。 首先,您不知道這些“單位”是什么,它們有多長時間等等。其次,您的所有代碼所做的只是將文件內容轉儲為十六進制。

我建議您在這里執行的操作是將文件映射到內存中,並使用一個類將其包裝起來,並使其實現Closeable

請參閱FileChannel.open()FileChannel.map() 但是請注意,在內存中映射多個1 GiB是不安全的。 這不是真正的mmap()

我假設一個單位是一個字節。 這個對嗎?

ArrayList不適合字節緩沖。 它是用於實現List接口的數組的包裝器類(通過它定義了大多數功能)。

http://docs.oracle.com/javase/7/docs/api/java/util/ArrayList.html

如果您只想從文件中讀取字節,則可以使用FileInputStream。

http://docs.oracle.com/javase/tutorial/essential/io/bytestreams.html

這是一個簡單的示例,該示例從包含“ hello world!”的文件中讀取輸入。

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;

public class Input {
public static void main(String[] args) throws FileNotFoundException, IOException {
    try (FileInputStream in = new FileInputStream("test.txt")) {
        int c;
        while ( (c = in.read()) != -1 )
            System.out.print((byte)c + " ");
    }
}
}

輸出的字節數:104101108108111 32119111114108 100 33 13 10

我不確定您所說的“單位”是什么意思。 讀取字節數據是這樣的:

File f = new File ("File.txt");
FileInputStream fis = new FileInputStream (f);
byte[] bytes = new byte[(int) f.length ()];
fis.read (bytes, 0, (int) f.length () );

確保您的文件不是太大。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM