Рубрики
Без рубрики

Входной поток Java в строку

Java InputStream в строку, Преобразуйте InputStream в строку с помощью класса BufferedReader, StringWriter, Scanner. Прочитайте файл в поток ввода и преобразуйте его в строку.

Автор оригинала: Pankaj Kumar.

Сегодня мы узнаем, как преобразовать входной поток в строку на Java. При работе с файлами иногда нам приходится читать файлы, а затем преобразовывать данные входного потока в строку для дальнейшей обработки.

Входной поток Java в строку

Мы можем преобразовать входной поток в строку многими способами.

  1. Буферизатор
  2. Строковый писатель
  3. Сканер

Давайте рассмотрим все эти классы для преобразования объекта 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. Если вы ищете наилучшую производительность, то вам следует выполнить некоторый тестовый прогон с выбранными вами образцами данных, а затем выбрать наиболее эффективный метод.

Рекомендации: