java - 如何在 Java 中将文件读取为无符号字节?

标签 java file byte

如何在 Java 中将文件读取为字节?

需要注意的是所有字节都必须是正数,即不能使用负数范围。

这可以用 Java 完成吗?如果可以,怎么做?

我需要能够将一个文件的内容乘以一个常数。我假设我可以将字节读入 BigInteger 然后相乘,但是由于一些字节是负数,我最终得到 12 13 15 -12 等并卡住了。

最佳答案

嗯,Java 没有无符号字节的概念……byte 类型总是有符号的,值从 -128 到 127(含)。然而,这将与其他使用无符号值的系统很好地互操作,例如,写入字节“255”的 C# 代码将生成一个文件,其中相同的值在 Java 中被读取为“-1”。小心点,你会没事的。

编辑:您可以使用位掩码非常轻松地将有符号字节转换为具有 unsigned 值的 int。例如:

byte b = -1; // Imagine this was read from the file
int i = b & 0xff;
System.out.println(i); // 255

使用 int 进行所有运算,然后在需要再次写出时转换回 byte

您通常使用 FileInputStream 从文件中读取二进制数据或者可能 FileChannel .

目前很难知道您还在寻找什么...如果您能在问题中提供更多详细信息,我们也许能为您提供更多帮助。

关于java - 如何在 Java 中将文件读取为无符号字节?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5144080/

相关文章:

java - 将 Realm 角色和资源角色与 Keycloak/Spring Security 一起使用

java - Java中获取目录中的每个文件

c++ - 将 url 存储到文件中,以便可以快速访问它们

java字节操作疑问

JavaRegEx 和复杂的长字符串

Java - 读取文本文件时出现 FilenotfoundException

c# - 如何检查文件夹的内容是否已更改

c# - 如何处理 byte[] 中的空值

java - 如何在java中将二进制字符串转换为十六进制并通过Uart端口发送

java - 谷歌应用引擎 - "java.lang.IllegalArgumentException: datastore transaction or write too big."