英文:
Why are bytes read from a file different between Java and VB.NET?
问题
我读取文件 file.dat 的数据。
这是我在 VB.NET 中的代码:
Dim data() As Byte = File.ReadAllBytes("F:\test.dat")
这是我在 Android 中的代码:
String fileName = Environment.getExternalStorageDirectory().getAbsolutePath() + "/data/test.dat";
File file = new File(fileName);
byte[] writeBuf = new byte[(int) file.length()];
FileInputStream fis = new FileInputStream(file);
fis.read(writeBuf);
fis.close();
这些是结果:Java 和 VB.NET 之间的一些字节值是不同的。
为什么 Java 和 VB.NET 之间的字节值会不同呢?
为什么 Java 和 VB.NET 之间的字节值会不同呢?
英文:
I read data of a file.dat.
This is my code in VB.NET:
Dim data() As Byte = File.ReadAllBytes("F:\test.dat")
This is my code in android:
String fileName = Environment.getExternalStorageDirectory().getAbsolutePath() + "/data/test.dat";
File file = new File(fileName);
byte[] writeBuf= new byte[(int) file.length()];
FileInputStream fis = new FileInputStream(file);
fis.read(writeBuf);
fis.close();
These are results: some bytes are different between Java and VB.NET
Why are the byte values are different between Java and VB.NET?
答案1
得分: 2
看到这些值,似乎只是一个有符号/无符号字节的问题。
有符号字节是 -128 到 127(在您的 Java 上下文中使用),而无符号字节是 0 到 255(在您的 .Net 上下文中使用)。
请注意,在两个上下文之间的数字不同的地方,如果将它们相加,它们会总和为 256(无论有符号/无符号,字节的最大值)。 (例如 154 + 102 = 256 和 217 + 39 = 256)。因此,数据本质上是相同的,只是由于受支持的数据类型范围不同而表示不同。
Java 没有无符号字节。
英文:
Looking at those values it appears that it's simply a signed/unsigned byte problem.
Signed Byte being -128 to 127 (used in your Java context) and Unsigned Byte being 0 to 255 (used in your .Net context).
Notice that where the numbers are different between the two contexts, if you add them, they sum to 256 (the maximum number of value for a byte regardless of signed/unsigned). (e.g. 154 + 102 = 256 and 217 + 39 = 256). So, the data is essentially the same, just represented differently given the supported datatype range.
Java doesn't have an unsigned byte.
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论