如何在java中读取由C ++程序创建的文件?

时间:2011-07-06 09:28:04

标签: java

我有一个由c ++程序创建的文件,它是加密格式的。我想在我的java程序中阅读它。在解密文件内容的情况下,解密算法正在对字节执行操作[在c / c ++中为unsigned char-BYTE]。我使用了我在c / c ++程序中使用的相同解密算法。该算法包含^,%,*和 - 字节操作。但java的字节数据类型是签名的,因为我在解密时面临问题。如何在未签名的情况下以1字节读取文件或处理读取数据? 提前谢谢。

4 个答案:

答案 0 :(得分:5)

byte b = <as read from file>;
int i = b & 0xFF;

根据需要在i执行操作

答案 1 :(得分:1)

首先,InputStream.read()返回一个int,但它保存一个字节;它使用int,因此如果达到EOF,则可以返回-1。如果int不是-1,则可以将其强制转换为byte。

其次,有read()方法允许将字节直接存储在byte []

最后,如果您要将该文件用作byte [](并且它不是太大),那么从FileInputStream复制数据并将其写入ByteArrayOutputStream会很有趣。你可以从后期对象中得到结果byte [](注意:不要使用.read()方法,使用.read(byte [],int,int)来提高性能。)

答案 2 :(得分:1)

标准方法InputStream.read()读取一个字节并将其装入int中,因此在实践中它是一个未定义的字节。在java中没有无符号的原始数据类型,因此唯一的方法是将它放在上层基元中。

话虽如此,对于从文件读取的数据字节执行加密/解密应该没有问题,因为字节是相同的,无论它们是被解释为有符号还是无符号(0xFF可以是255或-1)。你说alghorithm包含“^,%,*”等。这是对原始字节的解释,考虑到字符编码(我认为每个字符符合8位)。您不应该对原始字节以外的其他方式执行加密/解密操作。

答案 3 :(得分:1)

由于Java中没有无符号原语类型,我认为你可以做的是将有符号字节转换为整数(实际上这是无符号的,因为整数总是正数)。您可以按照此处的代码进行操作:Can we make unsigned byte in Java进行转换。