簡體   English   中英

從字節數組讀取到控制台(或文件)Java

[英]Read from byte array to console (or file) Java

因此,我有兩個文件,一個已讀入字節數組的二進制文件,一個已讀入字符串ArrayList的文本文件。 現在,假設我的ArrayList的值為“ char”,“ int”,“ double”,並用作讀取二進制文件的架構。

這意味着對於字節數組中的前兩個字節,我想解釋為一個字符,接下來的四個解釋為一個int,接下來的8個解釋為一個雙精度,這將重復進行直到文件結束。

我已經實現了讀取所有數據的功能,但是我想不出一種根據架構文件正確解釋二進制數據的好方法。 有什么好方法嗎?

使用PrintStream out = new PrintStream (new OutputStream(byteArray)) out.writeChar() out.writeInt() out.writeDouble() IE(偽代碼) PrintStream out = new PrintStream (new OutputStream(byteArray)) out.writeChar() out.writeInt() out.writeDouble()

流在哪里通過byteArray為我工作? (相對於我說out.writeChar(byteArray [2])?

我已經弄清楚了將架構映射到正確操作的所有邏輯,但是我在正確轉換數據時遇到了麻煩。 有什么想法嗎?

我想將此信息寫入控制台(或文件)。

認為面向對象! 您必須為每種所需的數據類型創建一個類,該類能夠解析輸入流中的數據。

步驟如下(不關心異常):

1)為這些類創建一個接口:

interface DataParser {
    void parse(DataInputStream in, PrintStream out);
}

2)為實現該接口的每種數據類型創建一個類。 例:

class IntParser implements DataParser {
    public void parse(DataInputStream in, PrintStream out) {
        int value = in.readInt();
        out.print(value);
    }
}

3)使用HashMap為其字符串ID注冊所有已知的解析器:

Map<String, DataParser> parsers = new HashMap<>();
parsers.put("int", new IntParser());

4)現在您可以像這樣使用它:

DataInputStream in = ... ;
PrintStream out = ... ;
...
while(hasData()) {
    String type = getNextType();
    DataParser parser = parsers.get(type);
    parser.parse(in, out);
}
// close streams and work on the output here

hasData方法應確定輸入流中是否仍然有數據。 方法getNextType應該從ArrayList返回下一個類型字符串。

如果只需要基本類型或字符串,則應使用DataInputStream包裝數據:

DataInputStream myDataInputStream=new DataInputStream(myByteInputStream);
myDataInputStream.readDouble();
myDataInputStream.readInt();
myDataInputStream.readChar();
myDataInputStream.readLong();

暫無
暫無

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

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