hashmap.get(char c)仅在linux中为特殊字符返回null

时间:2013-04-28 16:18:43

标签: java linux null hashmap

我不明白这一点。它只发生在linux中(在我的机器上运行正常)。它只发生在我正在阅读的文件中有特殊字符时。这可能是linux和Character.equals()的问题吗?

调用HashMap.get()的另一个函数中的代码。这会使用像Ã。

这样的特殊字符为每个Hashmap.get()打印“null”
fis = new FileInputStream(fromFile);
int fromCharInt;
//read a byte at a time from the file
while ((fromCharInt = fis.read()) != -1) {
     System.out.println((char)fromCharInt);  //prints Ã
     System.out.println(hMap.get((char)fromCharInt));  //prints null
}

生成HashMap

private static HashMap<Character, String> generateMap(HuffmanTree hTree, List<FreqTracker> freqs)
{
    HashMap<Character, String> hMap = new HashMap<Character, String>();
    BinaryNode<FreqTracker> charNode;
    for (FreqTracker freq: freqs)
    {
        charNode = HuffmanTree.findCharNode(freq.getC(), hTree.getRoot());

        hMap.put(freq.getC(), HuffmanTree.getBinaryCode(charNode, ""));
    }

    return hMap;
}

1 个答案:

答案 0 :(得分:1)

您正在从InputStream读取单个字节(这是InputStreams所做的...)。将其更改为* Reader并使用正确的字符编码打开它,并从Reader中读取字符,而不是字节。特殊字符通常是多个字节,默认情况下Linux通常是UTF-8编码,因此您的问题