我正在研究一种简单的VM /解释器程序,用于我实现的简单玩具语言。目前,编译器会发出文本汇编指令,例如push
和add
,以便VM执行。
最近我认为,为了性能和空间,实际编译为二进制操作码而不是文本操作码会更好。 (这个玩具项目实际上并不重要,但这是为了学习)。
很快我意识到,尽管我认为自己是一个不错的Java程序员,但我不知道如何使用Java中的二进制数据。毫无头绪。
关于这一点,我有两个问题:
如何将二进制数据保存到文件中?例如,我想将字节00000001
然后字节00100000
保存到文件中(每个字节将是VM的操作码) - 我该怎么做?
如何从磁盘上的文件中读取二进制数据,将其保存在变量中,解析并操作它?我是否使用常规字符串使用的常用I / 0和解析技术,或者这是不同的?
感谢您的帮助
答案 0 :(得分:0)
使用FileOutputStream。它有一个write(byte[] b)
方法将一个字节数组写入一个文件,一个write(int b)
方法将一个字节写入该文件。
因此,要保存00000001
后跟00100001
,您可以执行以下操作:
FileOutputStream file = new FileOutputStream(new File(path));
file.write(1);
file.write(33);
同样,您可以阅读FileInputStream来读取二进制文件。
答案 1 :(得分:0)
您应该能够使用任何 OutputStream
来执行此操作,因为它们都有write
方法,需要byte
。例如,您可以使用FileOutputStream
。
同样,您可以使用InputStream
的read
方法来读取字节。
答案 2 :(得分:0)
OutputStream
及其子类型具有将字节写入文件的方法。 DataOutputStream
有其他方法可以编写int
,long
,float
,double
等等,如果您需要这些方法,尽管它以大端字节顺序写入。相应的输入流具有相同的读取方法。
答案 3 :(得分:0)
您可能想尝试使用ByteArrayInputStream和DataOutputStream
有关详细信息,请参阅Oracle documentation。
另外,请查看此类似问题:How to output binary data to a file in Java?