#java #потоки_данных
Нужно считать текстовый файл из потока, как это сделано с картинкой. Важно: считывание в ОП а не в файл. ZipInputStream zis; BufferedImage tmpImage; tmpImage = null; tmpImage = ImageIO.read(zis);
Ответы
Ответ 1
Используя только классы из стандартной библиотеки Java, избежать циклов и прочего говнокода не получится никак. Имея произвольный InputStream, прочитать из него текст в виде строки можно следующим образом: import java.nio.charset.Charset; import java.io.*; static public String readTextFromInputStream(InputStream in, Charset cs) { StringBuilder text = new StringBuilder(); BufferedReader reader = new BufferedReader(new InputStreamReader(in, cs)); String line = null; String newline = System.getProperty("line.separator"); while ((line = reader.readLine()) != null) { text.append(line); text.append(newline); } return text.toString(); } Где параметр cs означает предполагаемую кодировку текста. Использовать примерно так: String text = readTextFromInputStream(in, Charset.forName("CP1251")); Если хотите избежать всего этого говнокода, у вас два варианта: либо подключить внешние библиотеки (к примеру, Apache Commons IO), либо использовать нормальные языки для JVM, к примеру, Scala, в которой решение займет одну строку: def readFromInputStream(in: InputStream, cs: Codec) = Source.fromInputStream(in)(cs).mkString Дополнение 1. Если хочется сохранить разбиение на строки, то модифицируем первоначальный вариант функции readFromInputStream следующим образом (так, чтобы она возвращала список строк): import java.util.List; import java.util.ArrayList; static public ListreadLinesFromInputStream(InputStream in, Charset cs) { List lines = new ArrayList(); BufferedReader reader = new BufferedReader(new InputStreamReader(in, cs)); String line = null; String newline = System.getProperty("line.separator"); while ((line = reader.readLine()) != null) { lines.add(line + newline); } return lines; }
Комментариев нет:
Отправить комментарий