繁体   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