目前已定位到是因为C#中的byte范围是0到255,而java中byte值为-128到127导致的错误。
尝试过使用C#的sbyte来解决:
bw1 = new BinaryWriter(new FileStream("C:\\Users\\DELL\\Desktop\\SpatialIndex\\ctest1.bin", FileMode.Create));
bw2 = new BinaryWriter(new FileStream("C:\\Users\\DELL\\Desktop\\SpatialIndex\\ctest2.bin", FileMode.Create));
byte[] bits=BitConverter.GetBytes(501751.060001268);//测试数据
sbyte[] bitsb = new sbyte[8];
for (int i = 0; i < bits.Length; i++)
{
byte abyte = bits[i];
if (abyte > 127)
{
bitsb[i] = (sbyte)(abyte - 256);
}
else
{
bitsb[i] = (sbyte)abyte;
}
bw1.Write(bitsb[i]);
bw2.Write(bits[i]);
}
但是写入后对比,两个文件中的内容还是一样,并没有生成为java二进制格式。
不知道有哪位高人也遇到并解决过类似问题。
public static sbyte[] ToJavaBytes(byte[] bytes) { int len = bytes.Length; sbyte[] sbs = new sbyte[len]; for (int i = 0; i < len; i++) { var b = bytes[i]; if (b > 127) { sbs[len - 1 - i] = (sbyte)(b - 256); } else { sbs[len - 1 - i] = (sbyte)b; } } return sbs; }
非常感谢,确实java中说明了:writes that long value to the underlying output stream as an 8-byte quantity, high byte first
根据您的信息,以彻底解决,非常感谢。
虽然看不懂你在说什么,但是早晚有一天我能帮你解决。谢谢骗系统呢