我有一个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;
}
答案 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())
。
更多信息: