Автор оригинала: Pankaj Kumar.
Сегодня мы узнаем, как преобразовать входной поток в строку на Java. При работе с файлами иногда нам приходится читать файлы, а затем преобразовывать данные входного потока в строку для дальнейшей обработки.
Входной поток Java в строку
Мы можем преобразовать входной поток в строку многими способами.
- Буферизатор
- Строковый писатель
- Сканер
Давайте рассмотрим все эти классы для преобразования объекта InputStream в строку.
1. Буферизатор
Вот простая программа, показывающая преобразование входного потока java в строку с помощью BufferedReader .
import java.io.BufferedReader; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStreamReader; public class InputStreamToStringUsingBufferedReader { final static String fileName = "/Users/pankaj/Downloads/file.txt"; public static void main(String[] args) throws IOException { long start = System.currentTimeMillis(); FileInputStream fileInputStream = null; BufferedReader bufferedReader = null; StringBuilder inputSB = null; try { fileInputStream = new FileInputStream(fileName); bufferedReader = new BufferedReader(new InputStreamReader(fileInputStream, "UTF-8")); inputSB = new StringBuilder(); String line = bufferedReader.readLine(); while (line != null) { inputSB.append(line); line = bufferedReader.readLine(); if (line != null) { // add new line character inputSB.append("\n"); } } } finally { bufferedReader.close(); fileInputStream.close(); } String str = inputSB.toString(); long end = System.currentTimeMillis(); System.out.println("InputStream to String using BufferedReader = " + (end - start) + "ms"); } }
2. Строковый писатель
Мы также можем использовать StringWriter для преобразования входного потока в строку. Обратите внимание, что он также использует BufferedReader
, но записывает данные в StringWriter, а затем легко преобразует их в строку.
import java.io.BufferedReader; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStreamReader; import java.io.Reader; import java.io.StringWriter; import java.io.Writer; public class InputStreamToStringUsingStringWriter { final static String fileName = "/Users/pankaj/Downloads/file.txt"; public static void main(String args[]) throws IOException { long start = System.currentTimeMillis(); FileInputStream fileInputStream = null; Reader reader = null; Writer writer = new StringWriter(); char[] buffer = new char[1024]; try { fileInputStream = new FileInputStream(fileName); reader = new BufferedReader(new InputStreamReader(fileInputStream, "UTF-8")); int n; while ((n = reader.read(buffer)) != -1) { writer.write(buffer, 0, n); } } finally { reader.close(); writer.close(); fileInputStream.close(); } String str = writer.toString(); long end = System.currentTimeMillis(); System.out.println("InputStream to String using StringWriter = " + (end - start) + "ms"); } }
3. Сканер
Мы также можем использовать класс сканера для чтения файла в виде входного потока и преобразования в строку.
import java.io.FileInputStream; import java.io.IOException; import java.util.Scanner; public class InputStreamToStringUsingScanner { final static String fileName = "/Users/pankaj/Downloads/file.txt"; public static void main(String[] args) throws IOException { long start = System.currentTimeMillis(); FileInputStream fileInputStream = null; Scanner scanner = null; try { fileInputStream = new FileInputStream(fileName); scanner = new Scanner(fileInputStream, "UTF-8"); String str = scanner.useDelimiter("\\A").next(); } finally { fileInputStream.close(); scanner.close(); } long end = System.currentTimeMillis(); System.out.println("InputStream to String using Scanner = "+(end-start)+"ms"); } }
Входной поток Java для строкового теста
Я выполнил все вышеперечисленные программы в файле размером 176 МБ. Ниже приведен результат тестового запуска.
Это все для преобразования входного потока в строку в Java. Если вы ищете наилучшую производительность, то вам следует выполнить некоторый тестовый прогон с выбранными вами образцами данных, а затем выбрать наиболее эффективный метод.
Рекомендации: