Code snippets, quotes, BASH scripts and nonsense. Not surprisingly, my main site is called Johann Burkard, too. Check out my web applications: Online Audio Converter, QR Code Generator, Pearson and Spearman Correlation calculator, PDF to JPEG Converter, Forex Data Feed and my exchange rates calculator based on currencyfeed.com. Also, check out Ole’s Tauschbörse Arbeit.
Page 1 · Page 2 · Page 3 · Page 4 · Page 5 · Page 6 · Page 7 · Page 8 · Page 9 · Page 10
Sep 04 2010
There are many ways to convert an InputStream (whether FileInputStream, SocketInputStream or others) to a String, StringBuffer or StringBuilder.
I implemented some of them and benchmarked them. Here’s the code:
package com.eaio.perftest;
import java.io.BufferedInputStream;
import java.io.BufferedReader;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.Reader;
import org.junit.Test;
public class StreamToStringTest {
private final File testFile = new File("testfile.txt");
private final int runs = 100;
@Test
public void variousMethods() throws IOException {
long then;
then = System.currentTimeMillis();
for (int i = 0; i < runs; ++i) {
byteByByteIntoByteArrayToString();
}
System.out.println("byteByByteIntoByteArrayToString(): " + (System.currentTimeMillis() - then) + " ms");
then = System.currentTimeMillis();
for (int i = 0; i < runs; ++i) {
byteByByteIntoCommonsIOByteArrayToString();
}
System.out.println("byteByByteIntoCommonsIOByteArrayToString(): " + (System.currentTimeMillis() - then) + " ms");
then = System.currentTimeMillis();
for (int i = 0; i < runs; ++i) {
charByCharReadingIntoStringBuffer();
}
System.out.println("charByCharReadingIntoStringBuffer(): " + (System.currentTimeMillis() - then) + " ms");
then = System.currentTimeMillis();
for (int i = 0; i < runs; ++i) {
charByCharReadingIntoStringBuffer();
}
System.out.println("charByCharReadingIntoStringBuilder(): " + (System.currentTimeMillis() - then) + " ms");
then = System.currentTimeMillis();
for (int i = 0; i < runs; ++i) {
bufferedIntoStringBuilder();
}
System.out.println("bufferedIntoStringBuilder(): " + (System.currentTimeMillis() - then) + " ms");
then = System.currentTimeMillis();
for (int i = 0; i < runs; ++i) {
bufferedReaderCharByCharIntoStringBuilder();
}
System.out.println("bufferedReaderCharByCharIntoStringBuilder(): " + (System.currentTimeMillis() - then) + " ms");
then = System.currentTimeMillis();
for (int i = 0; i < runs; ++i) {
bufferedStreamCharByCharIntoStringBuilder();
}
System.out.println("bufferedStreamCharByCharIntoStringBuilder(): " + (System.currentTimeMillis() - then) + " ms");
}
private void bufferedStreamCharByCharIntoStringBuilder() throws IOException {
InputStream stream = new BufferedInputStream(new FileInputStream(testFile), 4096);
Reader reader = new InputStreamReader(stream, "UTF-8");
StringBuilder builder = new StringBuilder();
int c;
while ((c = reader.read()) != -1) {
builder.append((char) c);
}
reader.close();
builder.toString();
}
private void bufferedReaderCharByCharIntoStringBuilder() throws IOException {
InputStream stream = new FileInputStream(testFile);
Reader reader = new BufferedReader(new InputStreamReader(stream, "UTF-8"));
StringBuilder builder = new StringBuilder();
int c;
while ((c = reader.read()) != -1) {
builder.append((char) c);
}
reader.close();
builder.toString();
}
private void bufferedIntoStringBuilder() throws IOException {
InputStream stream = new FileInputStream(testFile);
StringBuilder builder = new StringBuilder();
byte[] buf = new byte[4096];
int b;
while ((b = stream.read(buf)) != -1) {
builder.append(new String(buf, 0, b, "UTF-8"));
}
stream.close();
builder.toString();
}
private void byteByByteIntoCommonsIOByteArrayToString() throws IOException {
InputStream stream = new FileInputStream(testFile);
org.apache.commons.io.output.ByteArrayOutputStream out = new org.apache.commons.io.output.ByteArrayOutputStream();
int b;
while ((b = stream.read()) != -1) {
out.write(b);
}
stream.close();
new String(out.toByteArray(), "UTF-8");
}
private void byteByByteIntoByteArrayToString() throws IOException {
InputStream stream = new FileInputStream(testFile);
ByteArrayOutputStream out = new ByteArrayOutputStream() {
@Override
public synchronized byte[] toByteArray() {
return this.buf;
}
};
int b;
while ((b = stream.read()) != -1) {
out.write(b);
}
stream.close();
new String(out.toByteArray(), "UTF-8");
}
private void charByCharReadingIntoStringBuffer() throws IOException {
InputStream stream = new FileInputStream(testFile);
Reader reader = new InputStreamReader(stream, "UTF-8");
StringBuffer buffer = new StringBuffer();
int c;
while ((c = reader.read()) != -1) {
buffer.append((char) c);
}
reader.close();
buffer.toString();
}
private void charByCharReadingIntoStringBuilder() throws IOException {
InputStream stream = new FileInputStream(testFile);
Reader reader = new InputStreamReader(stream, "UTF-8");
StringBuilder buffer = new StringBuilder();
int c;
while ((c = reader.read()) != -1) {
buffer.append((char) c);
}
reader.close();
buffer.toString();
}
}
On this Windows XP box that has a fast RunCore Pro IV SSD in it, bufferedIntoStringBuilder is the fastest.
Page 1 · Page 2 · Page 3 · Page 4 · Page 5 · Page 6 · Page 7 · Page 8 · Page 9 · Page 10