在java中使用String来保存二进制数据是错误的吗?

时间:2015-08-21 21:54:39

标签: java c++ java-native-interface

我需要将二进制数据(文件中的红色)从java传递给c ++(使用jni),所以我有一个需要字符串的C ++函数(因为在c ++字符串中只是char数组)。

我使用以下代码在java中读取我的二进制文件:

byte[] buffer = new byte[512];
FileInputStream in = new FileInputStream("some_file");
int rc = in.read(buffer);
while(rc != -1)
{
 // rc should contain the number of bytes read in this operation.
  // do stuff...

  // next read
  rc = in.read(buffer);
String s = new String(buffer);
// here i call my c++ function an pass "s"
}

我担心创建字符串的行,当我将缓冲区放入字符串时实际发生了什么?似乎当数据到达我的c ++代码时,它与我期望的不同。

"字符串"构造函数以某种方式更改数据?

2 个答案:

答案 0 :(得分:4)

字符串根本不是char数组。它们是复杂的Unicode动物,具有代码点之间的语义交互,不同的二进制编码等。对于所有程序都是如此。关于C ++唯一不同的是,他们还没有完成抱怨,并开始对此做些事情。

在所有语言中,对于二进制数据,请使用显式二进制数据类型,如字节数组。

答案 1 :(得分:2)

C ++ char是Java byte。两者都是8位。 Java char是一个16位的值。

忽略C ++称之为char。给它一个Java byte[]