有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java数据输入流是否跳过字符?

我对DataInputStream有一个问题,它没有完全读取文件,因此经常(每33000个字符)跳过2-3个字符。我试图将文件(8MB)解析为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) 个答案

  1. # 1 楼答案

    ^{}代替DataInputStream。前者从字符输入流中读取文本,缓冲字符,以便有效读取字符、数组和行。我更喜欢使用BufferedReader而不是Scanner来处理性能问题。另外,使用StringBuilder而不是连接Strings

    以下是一个启动示例:

    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())

    更多信息: