我对DataInputStream有一个问题,它不完整地读取文件-经常跳过2-3个字符(每33000个字符)。我试图将文件(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;
}发布于 2014-08-12 19:52:00
使用BufferedReader而不是DataInputStream。前者从字符输入流中读取文本,缓冲字符,以便有效地读取字符、数组和行。我更愿意在性能问题上使用BufferedReader而不是Scanner。另外,使用StringBuilder而不是连接String的。
下面是一个开球的例子:
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());
}如果您使用Java6或更高版本,那么您必须使用System.getProperty("line.separator");而不是System.lineSeparator())。
更多信息:
https://stackoverflow.com/questions/25272863
复制相似问题