У меня есть метод, который читает текст из файла; в зависимости от входного параметра может потребоваться декомпрессия:
public static String readText(File inFile, boolean compressed) {
InputStream in = null;
InputStreamReader isr = null;
StringBuilder sb = new StringBuilder();//constant resizing is costly, so set the STRING_SIZE
try {
in = new FileInputStream(inFile);
if (compressed) {
in = new GZIPInputStream(in);
}
isr = new InputStreamReader(in);
int length = 0;
char[] cbuf = new char[8 * 1024];
while ((length = isr.read(cbuf)) != -1) {
sb.append(cbuf, 0, length);
}
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
in.close();
} catch (Exception e1) {
e1.printStackTrace();
}
}
return sb.toString();
}
Было предложено, чтобы я использовал InputStream таким образом, чтобы его было легче писать, и в итоге мне нужно было закрыть только одну вещь. Я все еще немного волнуюсь, это может вызвать утечку памяти. Итак, мой вопрос: кто-нибудь знает, в порядке ли код выше? Или мне нужно вернуться к дюжине потоков и закрыть их один за другим в блоке finally?
Большое спасибо.