OutPutStreamWriter Class in Java

The OutputStreamWriter class in Java serves the purpose of writing characters to an output stream. It performs the essential task of converting characters into bytes based on a specified character encoding. By utilizing a character encoding, OutputStreamWriter ensures that characters are accurately translated into their corresponding byte representation.

One important feature of OutputStreamWriter is that it incorporates its own CharToByteConverter. This converter acts as a bridge, allowing the seamless transition from character streams to byte streams. The OutputStreamWriter serves as the intermediary, handling the conversion process and facilitating the communication between the character-based and byte-based streams.

OutputStream os = new FileOutputStream("d:\\test.txt"); Writer osr = new OutputStreamWriter(os);

By using OutputStreamWriter, developers can effectively handle character-based data and transmit it as byte-based streams. This capability is particularly useful when dealing with I/O operations that involve different encoding schemes or when interacting with systems that require byte-level communication. OutputStreamWriter provides a reliable and efficient solution for managing the conversion between character and byte streams, ensuring accurate encoding translation and smooth data transfer.

Encoding Characters

The OutputStreamWriter in Java is responsible for encoding characters into bytes using a specified character set. When writing characters to an OutputStreamWriter, the specified charset determines how the characters are translated into their corresponding byte representation. This charset can be provided either by name, through a CharToByteConverter, or by accepting the default encoding defined by the system property file.encoding.

To accommodate different encoding requirements, the OutputStreamWriter offers alternative constructors. These constructors allow developers to explicitly specify the character set to be used for converting the written characters into bytes that are subsequently written to the underlying OutputStream. Some commonly used character sets include ISO-Latin1, UTF-8, and UTF-16, among others.

import java.util.*; import java.io.*; public class TestClass{ public static void main( String[] args ){ try { OutputStream os = new FileOutputStream("d:\\test.txt"); Writer osr = new OutputStreamWriter(os); osr.write("Java Stream handling !!"); osr.close(); } catch (IOException e) { e.printStackTrace(); } } }

By utilizing the OutputStreamWriter and its various constructors, developers can control the character encoding process and ensure that the written characters are accurately translated into the desired byte representation. This flexibility enables seamless communication between character-based data and byte-based streams, accommodating different encoding schemes and providing efficient data conversion capabilities.

When do you use a Reader/Writer and when a Stream?

Java OutPutStreamWriter tutorial

The choice between using a Reader/Writer and a Stream depends on the nature of the data you are working with.

A Reader/Writer is typically used when dealing with character-based data, such as text files or data that needs to be processed as characters. Readers are used for reading character-based input, while Writers are used for writing character-based output. Readers and Writers handle character encoding automatically, making them suitable for tasks that involve text processing.


Streams are more general-purpose and deal with byte-level data. InputStreams are used for reading binary data or raw bytes, while OutputStreams are used for writing binary data or raw bytes. Streams are commonly used for tasks that involve reading or writing non-character data, such as images, audio files, or binary files.