typ dat |
vstupní |
výstupní |
binární |
InputStream |
OutputStream |
znakové |
Reader |
Writer |
Proudy jsou koncipovány jako "stavebnice" — lze je spojovat za sebe a tím přidávat vlastnosti:
// casual input stream
InputStream is = System.in;
// bis enhances stream with buffering option
BufferedInputStream bis = new BufferedInputStream(is);
Neplést si streamy (proudy dat) s lambda streamy! |
Closable |
bytes closable |
characters closable |
lines closable |
Input |
InputStream |
InputStreamReader |
BufferedReader |
Output |
OutputStream |
OutputStreamWriter |
BufferedWriter |
Základem znakových vstupních proudů je abstraktní třída Reader (pro výstupní Writer).
Ze vstupního binárního proudu InputStream (čili každého) je možné vytvořit znakový Reader.
// binary input stream
InputStream is = ...
// character stream, decoding uses standard charset
Reader reader = new InputStreamReader(is);
// charsets are defined in java.nio package
Charset charset = java.nio.Charset.forName("ISO-8859-2");
// character stream, decoding uses ISO-8859-2 charset
Reader reader2 = new InputStreamReader(is, charset);
Na zjištění, jestli je možné z čtenáře číst, se používa metoda reader.ready() .
|
InputStreamReader isr = new InputStreamReader(is);
// takes another Reader and makes it bufferable
BufferedReader br = new BufferedReader(isr);
// BufferedReader supports read by line
String firstLine = br.readLine();
String secondLine = br.readLine();
Soubor se dá lehce transformovat na proud znaků.
File file = new File("some_file.txt");
// file converted to InputStream
FileInputStream fis = new FileInputStream(file);
// file converted to OutputStream
FileOutputStream fis = new FileOutp2utStream(file);
Soubor se otevřel, proto je nutno ho pak zavřít! (později)
OutputStream os = System.out;
os.write("Hello World!");
// we have to use generic newline separator
os.write(System.lineSeparator());
// bw has special method for that
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(os));
bw.newline();
System.out
, metoda println
pak přestane vypisovat text.public String readFirstLine(String path) throws IOException {
BufferedReader br = new BufferedReader(new FileReader(path));
try {
return br.readLine();
} finally {
if (br != null) br.close();
}
}
Nově sa dá použít tzv. try-with-resources:
public String readFirstLine(String path) throws IOException {
try (BufferedReader br = new BufferedReader(new FileReader(path))) {
return br.readLine();
}
}
Pomocí try-with-resources lze ošetřit i více proudů současně — zavřou se pak všechny.
try (
ZipFile zf = new ZipFile(zipFileName);
BufferedWriter writer = new BufferedWriter(outputFilePath, charset)
) {
...
}
Obecně lze do hlavičky try-with-resources dát nejen proud, ale cokoli, co implementuje java.io.Closeable. |
je typ proudu standardního výstupu System.out (a chybového System.err).
pro znaková data
Příklad s nastavením kódování:
PrintWriter writer = new PrintWriter(new OutputStreamWriter(output, "UTF-8"));
Postupy ukládání a rekonstrukce objektů:
postup, jak z objektu vytvořit sekvenci bajtů perzistentně uložitelnou na paměťové médium (disk) a později restaurovatelnou do podoby výchozího javového objektu.
je právě zpětná rekonstrukce objektu
Aby objekt bylo možno serializovat, musí implementovat prázdné rozhraní java.io.Serializable. |
private void writeObject(ObjectOutputStream stream) throws IOException
private void readObject(ObjectInputStream stream) throws IOException, ClassNotFoundException
ObjectInputStream je proud na čtení serializovaných objektů.
/