answersLogoWhite

0


Best Answer

Byte Streams

If a program needs to read/write bytes (8-bit data), it could use one of the subclasses of the InputStream or OutputStream respectively. The example below shows how to use the class FileInputStream to read a file named abc.dat. This code snippet prints each byte's value separated with white spaces. Byte values are represented by integers from 0 to 255, and if the read() method returns -1, this indicates the end of the stream.

import java.io.FileInputStream;
import java.io.IOException;
public class ReadingBytes {
public static void main(String[] args) { FileInputStream myFile = null; try {
myFile = new FileInputStream("c:\\abc.dat"); // open the stream
boolean eof = false;
while (!eof) {
int byteValue = myFile.read(); // read the stream
System.out.println(byteValue);
if (byteValue == -1){
eof = true;
}
//myFile.close(); // do not do it here!!!
}
}catch (IOException e) {
System.out.println("Could not read file: " + e.toString());
} finally{
try{
if (myFile!=null){
myFile.close(); // close the stream
}
} catch (Exception e1){
e1.printStackTrace();
}
}
}
}

Please note that the stream is closed in the clause finally. Do not call the method close() inside of the try/catch block right after the file reading is done. In case of exception during the file read, the program would jump over the close() statement and the stream would never be closed!

The next code fragment writes into the file xyz.dat using the class FileOutputStream:

int somedata[]={56,230,123,43,11,37};
FileOutputStream myFile = null;
try {
myFile = new FileOutputStream("c:\xyz.dat");
for (int i = 0; i myFile.write(data[I]);
}
} catch (IOException e)
System.out.println("Could not write to a file: " + e.toString()); }
finally
// Close the file the same way as in example above }

Buffered Streams

So far we were reading and writing one byte at a time. Disk access is much slower than the processing performed in memory. That's why it's not a good idea to access disk 1000 times for reading a file of 1000 bytes. To minimize the number of time the disk is accessed, Java provides buffers, which are sort of "reservoirs of data". For example, the class BufferedInputStream works as a middleman between the FileInputStream and the file itself. It reads a big chunk of bytes from a file in one shot into memory, and, then the FileInputStream will read single bytes from there. The BufferedOutputStream works in a similar manner with the class FileOutputStream. Buffered streams just make reading more efficient.

You can use stream chaining (or stream piping) to connect streams - think of connecting two pipes in Plumbing. Let's modify the example that reads the file abc.dat to introduce the buffering:

FileInputStream myFile = null;
BufferedInputStream buff =null
try {
myFile = new FileInputStream("abc.dat");
BufferedInputStream buff = new BufferedInputStream(myFile);
boolean eof = false;
while (!eof) {
int byteValue = buff.read();
System.out.print(byteValue + " ");
if (byteValue == -1)
eof = true;
}
} catch (IOException e) {
e.printStackTrace();
} finally{
buff.close();
myFile.close();
}

It's a good practice to call the method flush() when the writing into a BufferedOutputStream is done - this forces any buffered data to be written out to the underlying output stream.

While the default buffer size varies depending on the OS, it could be controlled. For example, to set the buffer size to 5000 bytes do this:

BufferedInputStream buff = new BufferedInputStream(myFile, 5000);

Character Streams

Java uses two-byte characters to represent text data, and the classes FileReader and FileWriter work with text files. These classes allow you to read files either one character at a time with read(), or one line at a time with readLine().

The classes FileReader and FileWriter also support have buffering with the help of BufferedReader and BufferedWriter. The following example reads text one line at a time:

FileReader myFile = null;
BufferedReader buff = null;
try {
myFile = new FileReader("abc.txt");
buff = new BufferedReader(myFile);
boolean eof = false;
while (!eof) {
String line = buff.readLine();
if (line == null)
eof = true;
else
System.out.println(line);
}
....
}

For the text output, there are several overloaded methods write() that allow you to write one character, one String or an array of characters at a time.

To append data to an existing file while writing, use the 2-arguments constructor (the second argument toggles the append mode):

FileWriter fOut = new FileWriter("xyz.txt", true);

Below is yet another version of the tax calculation program (see the lesson Intro to Object-Oriented Programming with Java). This is a Swing version of the program and it populates the populate the dropdown box chState with the data from the text file states.txt.

import java.awt.event.*;
import java.awt.*;
import java.io.FileReader;
import java.io.BufferedReader;
import java.io.IOException;

public class TaxFrameFile extends java.awt.Frame implements ActionListener {
Label lblGrIncome;
TextField txtGrossIncome = new TextField(15);
Label lblDependents=new Label("Number of Dependents:");
TextField txtDependents = new TextField(2);
Label lblState = new Label("State: ");
Choice chState = new Choice();

Label lblTax = new Label("State Tax: ");
TextField txtStateTax = new TextField(10);
Button bGo = new Button("Go");
Button bReset = new Button("Reset");

TaxFrameFile() {
lblGrIncome = new Label("Gross Income: ");
GridLayout gr = new GridLayout(5,2,1,1);
setLayout(gr);

add(lblGrIncome);
add(txtGrossIncome);
add(lblDependents);
add(txtDependents);
add(lblState);
add(chState);
add(lblTax);
add(txtStateTax);
add(bGo);
add(bReset);

// Populate states from a file
populateStates();
txtStateTax.setEditable(false);

bGo.addActionListener(this);
bReset.addActionListener(this);

// Define, instantiate and register a WindowAdapter
// to process windowClosing Event of this frame

this.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.out.println("Good bye!");
System.exit(0);
}});
}

public void actionPerformed(ActionEvent evt) {
Object source = evt.getSource();
if (source == bGo ){
// The Button Go processing
try{
int grossInc =
Integer.parseInt(txtGrossIncome.getText());
int dependents =
Integer.parseInt(txtDependents.getText());
String state = chState.getSelectedItem();

Tax tax=new Tax(dependents,state,grossInc);
String sTax =
Double.toString(tax.calcStateTax());
txtStateTax.setText(sTax);
}catch(NumberFormatException e){
txtStateTax.setText("Non-Numeric Data");
}catch (Exception e){
txtStateTax.setText(e.getMessage());
}
}
else if (source == bReset ){
// The Button Reset processing
txtGrossIncome.setText("");
txtDependents.setText("");
chState.select(" ");
txtStateTax.setText("");
}
}
// This method will read the file states.txt and
// populate the dropdown chStates
private void populateStates(){
FileReader myFile = null;
BufferedReader buff = null;
try {
myFile = new FileReader("states.txt");
buff = new BufferedReader(myFile);

boolean eof = false;
while (!eof) {
String line = buff.readLine();
if (line == null)
eof = true;
else
chState.add(line);
}
}catch (IOException e){
txtStateTax.setText("Can't read states.txt");
}
finally{
// Closing the streams
try{
buff.close();
myFile.close();
}catch(IOException e){
e.printStackTrace();
}
}
}

public static void main(String args[]){
TaxFrameFile taxFrame = new TaxFrameFile();
taxFrame.setSize(400,150);
taxFrame.setVisible(true);
}
}

Data Streams

If you are expecting to work with a stream of a known data structure, i.e. two integers, three floats and a double, use either the DataInputStream or the DataOutputStream. A method call readInt() will read the whole integer number (4 bytes ) at once, and the readLong() will get you a long number (8 bytes).

The DataInput stream is just a filter. We are building a "pipe" from the following fragments:

FileInputStream --> BufferedInputStream --> DataInputStream

FileInputStream myFile = new FileInputStream("myData.dat");
BufferedInputStream buff = new BufferedInputStream(myFile);
DataInputStream data = new DataInputStream(buff);

try {
int num1 = data.readInt();
int num2 = data.readInt();
float num2 = data.readFloat();
float num3 = data.readFloat();
float num4 = data.readFloat();
double num5 = data.readDouble();
} catch (EOFException eof) {...}

User Avatar

Wiki User

10y ago
This answer is:
User Avatar

Add your answer:

Earn +20 pts
Q: Explain different stream classes in Java?
Write your answer...
Submit
Still have questions?
magnify glass
imp
Related questions

Why we write java program using classes?

Classes are well organised functions in java which help discriminate between two different functions.


Is there any difference between java and j2SE?

Core Java and J2SE are the same thing, which is the set of classes to be found in the rt.jar package. The classes were just given different names at different stages of the continued revisions to the Java Runtime Environment.


What are sealed classes in java?

Final classes are sealed classes in java I guess.


What classes are needed for java web development?

There are many different classes that teach Java Web Development. You must be comfortable with the coding language Javascript and have a basic grasp on how the internet and programming works.


Explain three different methods in java?

There are three different methods /functions in java are there : 1)computational methods.2)manipulative methods.3)procedural methods.


What are the different classes in java?

Java has thousands of classes. Refer to the online documentation for details. You can also create your own classes.Java has thousands of classes. Refer to the online documentation for details. You can also create your own classes.Java has thousands of classes. Refer to the online documentation for details. You can also create your own classes.Java has thousands of classes. Refer to the online documentation for details. You can also create your own classes.


What is Difference between java and core java?

Java or Java SE comes with the standard library, with all the crazy classes to make life easy. Java Core does not come with most of these classes, so that it is a lot smaller.


What is a collection of related classes called in java?

a package


How java is different from c plus plus Explain with example?

See related links, below.


Why do you extend classes in java?

We use the classes in java to reuse their coding for the child classes.So as to save our time and development overhead.


Explanation of import javautilDate?

The import keyword in Java is used to tell the Java compiler where to find different classes and packages.java.util.Date is the location of the Date class: Date is a member of the util package, which is a member of the java package.


What is JButton in java and explain it?

A JButton on Java is a button used for G.U.I (graphical user interface) and displays a button on a window created which can be programmed for different tasks.