DataInputStream是否跳过字符?

时间:2014-08-12 19:48:14

标签: java json datainputstream

我有一个DataInputStream的问题,它没有完全读取文件,每隔一段时间(每33,000个字符)就会跳过2-3个字符。我试图将文件(8 mb)解析为json,并将字符串中的跳过的字符解析为json。

public static String readTemplate(String templateName) throws IOException
{
    log.info("Opening Template");
    InputStream resStream = this.getClass().getResourceAsStream("/assets/"+SpellCraftMod.MODID+"/templates/"+templateName+".json"); // I need to open the file that way
    DataInputStream in = new DataInputStream(resStream);
    String temp = "";
    SpellCraftMod.log.info("Reading Data");
    int available = 0;
    while ((available = in.available()) > 0)
    {
        try
        {
            temp += in.readUTF();
        } catch (EOFException ignore) {}
        log.info("To GO: " + available);
    }
    log.info("Closing File");
    in.close();
    resStream.close();
    return temp;
}

1 个答案:

答案 0 :(得分:2)

使用BufferedReader代替DataInputStream。前者从字符输入流中读取文本,缓冲字符,以便有效地读取字符,数组和行。。我希望使用BufferedReader而不是Scanner来表现性能问题。另外,请使用StringBuilder而不是连接String s。

这是一个启动示例:

BufferedReader br = new BufferedReader( new InputStreamReader(resStream, "UTF-8") );
StringBuilder sb = new StringBuilder();
String line;
while ( (line = br.readLine()) != null) {
    sb.append(line).append(System.lineSeparator());
}

如果您使用的是Java 6或更早版本,则必须使用System.getProperty("line.separator");代替System.lineSeparator())

更多信息: