MyTetra Share
Делитесь знаниями!
Using Byte Streams
Время создания: 17.08.2017 22:39
Текстовые метки: knowledge
Раздел: Java - Oracle tutorial - I/O Files
Запись: xintrea/mytetra_db_mcold/master/base/1502998191cd4ibzizw5/text.html на raw.githubusercontent.com

Using Byte Streams

We'll explore FileInputStream and FileOutputStream by examining an example program named CopyBytes, which uses byte streams to copy xanadu.txt, one byte at a time.

import java.io.FileInputStream;

import java.io.FileOutputStream;

import java.io.IOException;


public class CopyBytes {

public static void main(String[] args) throws IOException {


FileInputStream in = null;

FileOutputStream out = null;


try {

in = new FileInputStream("xanadu.txt");

out = new FileOutputStream("outagain.txt");

int c;


while ((c = in.read()) != -1) {

out.write(c);

}

} finally {

if (in != null) {

in.close();

}

if (out != null) {

out.close();

}

}

}

}

CopyBytes spends most of its time in a simple loop that reads the input stream and writes the output stream, one byte at a time, as shown in the following figure.

Simple byte stream input and output.

Always Close Streams

Closing a stream when it's no longer needed is very important — so important that CopyBytes uses a finally block to guarantee that both streams will be closed even if an error occurs. This practice helps avoid serious resource leaks.

One possible error is that CopyBytes was unable to open one or both files. When that happens, the stream variable corresponding to the file never changes from its initial nullvalue. That's why CopyBytes makes sure that each stream variable contains an object reference before invoking close.

When Not to Use Byte Streams

CopyBytes seems like a normal program, but it actually represents a kind of low-level I/O that you should avoid. Since xanadu.txt contains character data, the best approach is to use character streams, as discussed in the next section. There are also streams for more complicated data types. Byte streams should only be used for the most primitive I/O.

So why talk about byte streams? Because all other stream types are built on byte streams.

Так же в этом разделе:
 
MyTetra Share v.0.65
Яндекс индекс цитирования