java io c++ streamsrazvanm/600.120/java-io-c... · 22.10.2004 · streams of characters reader...
TRANSCRIPT
Java IOand
C++ StreamsOctober 22, 2004
Operator Overloading in C++ - 2004-10-21 – p. 1/31
Outline
Java IO
InputStream/OutputStream
FilterInputStream/FilterOutputStream
DataInputStream/DataOutputStream
Reader/Writer
Encodings
C++ Streams
Operator Overloading in C++ - 2004-10-21 – p. 2/31
java.io - IntroTwo main abstractions:
streams of bytesInputStream
abstract classis the superclass of all classes representing aninput stream of bytes
OutputStreamabstract classis the superclass of all classes representing anoutput stream of bytes
streams of characters
Operator Overloading in C++ - 2004-10-21 – p. 3/31
java.io - IntroTwo main abstractions:
streams of bytes
streams of charactersReader
abstract classis the superclass of all classes representing aninput stream of characters
Writerabstract classis the superclass of all classes representing anoutput stream of characters
Operator Overloading in C++ - 2004-10-21 – p. 4/31
OutputStreammust always provide at least a method that writes onebyte of output
methods:
void close()void flush()void write(byte[] b)void write(byte[] b, int off, int len)abstract void write(int b)
subclasses
Operator Overloading in C++ - 2004-10-21 – p. 5/31
OutputStream (cont)subclasses:
ByteArrayOutputStreamdata is written into a byte arraythe buffer automatically grows as data is written toit
FileOutputStreamwriting data to a File or to a FileDescriptormeant for writing streams of raw byte
FilterOutputStreamObjectOutputStreamPipedOutputStream
Operator Overloading in C++ - 2004-10-21 – p. 6/31
OutputStream (cont)subclasses:
ByteArrayOutputStreamFileOutputStreamFilterOutputStream
superclass of all classes that filter output streamssubclasses: BufferedOutputStream,CheckedOutputStream, CipherOutputStream,DataOutputStream, DeflaterOutputStream,DigestOutputStream, PrintStream
ObjectOutputStreamPipedOutputStream
Operator Overloading in C++ - 2004-10-21 – p. 7/31
OutputStream (cont)subclasses:
ByteArrayOutputStreamFileOutputStreamFilterOutputStreamObjectOutputStream
writes primitive data types and graphs of Javaobjectsonly objects that support the java.io.Serializableinterface can be written to streamsprimitive data types can also be written
PipedOutputStreamcan be connected to a piped input stream tocreate a communications pipe
Operator Overloading in C++ - 2004-10-21 – p. 8/31
FilterOutputStreamwrites data to another OutputStream
two kind of subclasses:processing of the data:
BufferedOutputStreamCheckedOutputStreamCipherOutputStreamDeflaterOutputStream· GZIPOutputStream· ZipOutputStreamDigestOutputStream
provides an expanded interface:DataOutputStreamPrintStream: polymorphic print and println, printf
Operator Overloading in C++ - 2004-10-21 – p. 9/31
DataOutputStreamExtended interface provided by DataOutputStream:void writeBoolean(boolean v)void writeByte(int v)void writeBytes(String s)void writeChar(int v)void writeChars(String s)void writeDouble(double v)void writeFloat(float v)void writeInt(int v)void writeLong(long v)void writeShort(int v)void writeUTF(String str)
Operator Overloading in C++ - 2004-10-21 – p. 10/31
OutputStream - ExampleFileOutputStream fileOut =
new FileOutputStream("myfile");// add bufferingBufferedOutputStream bufOut =
new BufferedOutputStream(fileOut);// add compressionGZIPOutputStream gzOut =
new GZIPOutputStream(bufOut);// interface for binary dataDataOutputStream out =
new DataOutputStream(gzOut);// some writingout.writeInt(n);out.writeDouble(d);
Operator Overloading in C++ - 2004-10-21 – p. 11/31
OutputStream - What if?FileOutputStream fileOut =
new FileOutputStream("myfile");BufferedOutputStream bufOut =
new BufferedOutputStream(fileOut);GZIPOutputStream gzOut =
new GZIPOutputStream(bufOut);DataOutputStream out1 =
new DataOutputStream(gzOut);DataOutputStream out2 =
new DataOutputStream(bufOut);
out1.writeInt(n);out2.writeDouble(d);
Operator Overloading in C++ - 2004-10-21 – p. 12/31
OutputStream - What if?FileOutputStream fileOut =
new FileOutputStream("myfile");BufferedOutputStream bufOut =
new BufferedOutputStream(fileOut);GZIPOutputStream gzOut =
new GZIPOutputStream(bufOut);DataOutputStream out1 =
new DataOutputStream(gzOut);DataOutputStream out2 =
new DataOutputStream(bufOut);
out1.writeInt(n);out2.writeDouble(d);
The output will be corrupted!
Operator Overloading in C++ - 2004-10-21 – p. 13/31
OutputStream - A common construction
DataOutputStream out =new DataOutputStream(
new GZIPOutputStream(new BufferedOutputStream(
FileOutputStream("myfile"))));
out.writeInt(n);out.writeDouble(d);
Operator Overloading in C++ - 2004-10-21 – p. 14/31
InputStreamsimilar with OutputStream but in reverse
subclasses:ByteArrayInputStreamFileInputStreamFilterInputStreamObjectInputStreamPipedInputStreamSequenceInputStream
represents the logical concatenation of other inputstreams
Operator Overloading in C++ - 2004-10-21 – p. 15/31
The other world: charactersWriter
methods that a subclass must implement are:write(char[], int, int), flush(), and close()subclasses: BufferedWriter, CharArrayWriter,FilterWriter, OutputStreamWriter, FileWriter,PipedWriter, PrintWriter, StringWriter
Readermethods that a subclass must implement areread(char[], int, int) and close()subclasses: BufferedReader, CharArrayReader,FilterReader, InputStreamReader, PipedReader,StringReader
What is the big difference?
Operator Overloading in C++ - 2004-10-21 – p. 16/31
The other world: charactersWriter
methods that a subclass must implement are:write(char[], int, int), flush(), and close()subclasses: BufferedWriter, CharArrayWriter,FilterWriter, OutputStreamWriter, FileWriter,PipedWriter, PrintWriter, StringWriter
Readermethods that a subclass must implement areread(char[], int, int) and close()subclasses: BufferedReader, CharArrayReader,FilterReader, InputStreamReader, PipedReader,StringReader
What is the big difference? Encodings!
Operator Overloading in C++ - 2004-10-21 – p. 17/31
InputStreamReader/OutputStreamWriter
InputStreamReaderis a bridge from byte streams to character streamsreads bytes and decodes them into characters usinga specified charset
OutputStreamWriterthe opposite of InputStreamReader
Operator Overloading in C++ - 2004-10-21 – p. 18/31
EncodingsJDKTM 5.0 Documentation
→ Tool Docs→ Internationalization Tools
→ native2ascii→ Supported Encodings
docs/guide/intl/encoding.doc.html
Operator Overloading in C++ - 2004-10-21 – p. 19/31
Another Universe:
C++ Streams
Operator Overloading in C++ - 2004-10-21 – p. 20/31
Reference
The C++ Programming Language, Third
Edition by Bjarne Stroustrup. Published by
Addison Wesley Longman, Inc.
Operator Overloading in C++ - 2004-10-21 – p. 21/31
Standard StreamsSeveral standard streams are declared in <iostream>:ostream cout // standard output stream
// of charostream cerr // standard unbuffered output
// stream for error messagesostream clog // standard output stream for
// error messageswostream wcout; // wide stream ver. of coutwostream wcerr; // wide stream ver. of cerrwostream wclog; // wide stream ver. of clog
Operator Overloading in C++ - 2004-10-21 – p. 22/31
istreamProvides:
»get
getline
read
gcount
putback
tie
Operator Overloading in C++ - 2004-10-21 – p. 23/31
ostreamProvides:
«put
write
Operator Overloading in C++ - 2004-10-21 – p. 24/31
Statebool good() const; // next op. might succeedbool eof() const; // end of input seenbool fail() const; // next op. will failbool bad() const; // stream is corruptediostate rdstate() const; // get io state flagsvoid clear(iostate f = goodbit);
// set io state flagsvoid setstate(iostate f) {clear(rdstate()|f); // add f to iostate flags
}operator void*() const; // nonzero if !fail()bool operator!() const {return fail();
}
Operator Overloading in C++ - 2004-10-21 – p. 25/31
Formatingstatic const fmtflagsskipws, // skip whitespace on inputleft // pad after valueright, // pad before valueinternal, // pad between sign and valueboolalpha, // use symbolic representationdec, // base 10 output (decimal)hex, // base 16 output (hexadecimal)oct, // base 8 output (octal)scientific, // d.ddddddEddfixed, // dddd.ddshowbase, // prefix oct by 0 and hex by 0xshowpoint, // print trailing zerosshowpos, // explicit ’+’ for positive intsuppercase; // ’E’, ’X’ rather than ’e’, ’x’
Operator Overloading in C++ - 2004-10-21 – p. 26/31
Formating (cont)// read flagsfmtflags flags() const;// set flagsfmtflags flags(fmtflags f);// add flagsfmtflags setf(fmtflags f) {return flags(flags()|f);
}// clear flagsvoid unsetf(fmtflags mask) {flags(flags()&˜mask);
}
Operator Overloading in C++ - 2004-10-21 – p. 27/31
Manipulatorsdeclared in <iomanip>, namespase std
Manipulators:boolalpha, noboolalphashowbase, noshowbaseshowpoint, noshowpointshowpos, noshowposskipws, noskipws, wsuppercase, nouppercaseinternalleft, rightdec, hex, octfixed, scientific
Operator Overloading in C++ - 2004-10-21 – p. 28/31
Manipulators (cont)Manipulators (cont):
endl, endsflushresetioflags, setioflagssetbasesetfillsetprecisionsetw
Operator Overloading in C++ - 2004-10-21 – p. 29/31
Other kinds of streamsFile Streams
<fstream>ifstream, ofstream, fstream
String Streams<sstream>istringstream, ostringstream, stringstreamwistringstream, wostringstream, wstringstream
Stream Buffers
Operator Overloading in C++ - 2004-10-21 – p. 30/31
That’s all!
Have a nice weekend!
Operator Overloading in C++ - 2004-10-21 – p. 31/31