读取存储为java中的ascii字符的整数值

时间:2014-11-11 12:56:23

标签: java file io ascii

来自ImageMagick的原始rgb数据格式基本上是以ascii值保存到文件中的一些整数。例如当它存储42并且我在一个简单的文本编辑器中打开日期时,我看到" *"在那个位置(或36-> $ ...)。 我想将这些值读入java程序。我已经尝试过类似的东西:

br = new BufferedReader(new FileReader(fileName));          
while ((sCurrentLine = br.readLine()) != null) {                
    for (int i=0;i<sCurrentLine.length();i++) {
        char chr = sCurrentLine.charAt(i);
        int ascii = (int) chr;
    }
}

通过这种方式,我可以按原样读取值,但是某些特定字符(如新行(NL ascii:10)或类似字符)存在问题。 是否有更好的方法来读取像二进制读取这样的文件?

1 个答案:

答案 0 :(得分:1)

byte[] bytes = Files.readAllBytes(Paths.get("C:/temp/test.png"));

字节是-128到127之间的值(有符号)。对于无符号值:

int value = bytes[i] & 0xFF;

现在java有点特殊,因为char和String保存Unicode文本,因此FileReader从文件中字节的默认平台编码进行转换。除了低效之外,在Linux服务器上,默认编码可以是UTF-8,一种多字节编码。那会失败,而不是在char和byte之间给出一对一的对应关系。在西欧Windows上,特殊引用可能会成为一个高Unicode字符&gt; 255。

最好不要将char / String / Reader / Writer用于纯二进制数据。