Java2 Certification
|
|
You can discuss this topic with others at
http://www.jchq.net/discus
Read reviews and buy a Java Certification
book at http://www.jchq.net/bookreviews/jcertbooks.htm
Select valid constructor arguments for subclasses from a list of classes in the java.io.package.
The emphasis on this objective is to know that constructors are valid. The most obvious break in the possible constructors is that the RandomFile class does not take a Stream constructor, for more information on RandomAccessFile see the next section.
These children of classes take instances of other streams as constructors. Thus the exam might ask you if they could take an instance of file, a string file, a writer or a path to see if you understand the valid constructors. A valid constructor will be some kind of stream plus possible other parameters.
The Filtering in these classes allow you to access information more usefully than a stream of bytes. It might be useful not to worry about the names FilterInputStream and FilterOutputStream as it is the Subclasses that contain the useful methods. These main subclasses are
The FileInputStream and FileOutputStream take some kind of File as a constructor. This can be a String containing the file name, and instance of the File class or a File descriptor. These classes are often used to construct the first step in a chain of Stream classes. Typically an FileInputStream will be connected to a File and that will be connected to an instance of InputStreamReader to read text characters. Here is an example of chaining the FileInputStream to the InputStream reader. This program will print out its own source code.
import java.io.*; public class Fis{ public static void main(String argv[]){ try{ FileInputStream in = new FileInputStream("Fis.java"); InputStreamReader isr = new InputStreamReader(in); int ch=0; while((ch = in.read())> -1){ StringBuffer buf = new StringBuffer(); buf.append((char)ch); System.out.print(buf.toString()); } } catch (IOException e){System.out.println(e.getMessage());} } }
It is probably advisable when programming in the "real world" to use
the
InputStreamReader class in this type of situation to allow for easy of internationalisation..
See the GreekReader example in section 11.01 for an example of this.
The Buffered streams are direct descendents
of the Filter streams. They
read in more
information than is immediately needed into
a buffer. This
increases efficiency as when
a read occurs it is more likely to be from
memory
(fast) than from disk (slow). This
buffering means they are particularly
useful
if you are reading in large amounts of data.
An example might be
where you are processing
several tens of megabytes of text data. The
BufferedInputStream
and BufferedOutputStream
take an instance of a stream class as a constructor
but
may take a size parameter so you can
tune the size of the buffer used.
Here is an example of using the BufferedInputStream,
note how similar it
is the the previous example
with InputStreamReader replaced by BufferedInputStream
import java.io.*; public class BufIn{ public static void main(String argv[]){ try{ FileInputStream fin = new FileInputStream("BufIn.java"); BufferedInputStream bin = new BufferedInputStream(fin); int ch=0; while((ch=bin.read())> -1){ StringBuffer buf = new StringBuffer(); buf.append((char)ch); System.out.print(buf.toString()); } }catch(IOException e){System.out.println(e.getMessage());}; } }
The DataInputStream and OutputStream are
used to read binary representations
of Java
primitives in a portable way. It gives you
access to a range of
methods such as readDoble,
readIn that will work the same on different
platforms.
In JDK1.0 this was one of the
main ways to access unicode text, but has
been
superceeded by the Reader classes since
JDK 1.1. These classes take an instance
of
a Stream as a constructor
The following examples write a single character
to the file system and then
read it back
and print it to the console.
//Write the file import java.io.*; public class Dos{ public static void main(String argv[]){ try{ FileOutputStream fos = new FileOutputStream("fos.dat"); DataOutputStream dos = new DataOutputStream(fos); dos.writeChar('J'); }catch(IOException e){System.out.println(e.getMessage());} } } //Read the file import java.io.*; public class Dis{ public static void main(String argv[]){ try{ FileInputStream fis= new FileInputStream("fos.dat"); DataInputStream dis = new DataInputStream(fis); System.out.println(dis.readChar()); }catch(IOException e){System.out.println(e.getMessage());} } }
The File class has three constructor versions.
These are
File(String path);
File(String path, String name)
File (File dir, String name);
The three are very similar and perform effectivly
the same function. The simple simple String
constructor takes the name of the file in
a single sting. This can be either an absolute
or relative path to the file. The second
version takes the path and file name as separate
Strings and the third option is very similar
to the first except that the first parameter
for the directory has the File type instead
of String.
The important thing to be aware of with the constructors for RandomAccessFile is that it takes two constructor parameters and the second parameter is a String containing the file mode. See the next section for details of how to use RandomAccessFile.
Which of the following are valid constructors for the FileInputStream class?
1) File
2) String
3) File descriptor
4) RadomAccessFile
Which of the following are valid constructors for the BufferedInputStream class?
1) BufferedInputStream(FileInputStream in,
int size)
2) BufferedInputStream(FileInputStream in)
3) BufferedInputStream(FileOutputStream fos)
4) BufferedInputStream(RandomAccessFile ram)
Which of the following are valid constructors for the DataOutputStream class
1) DataInputStream(FileInputStream in, int
size)
2) DataInputStream(FileInputStream in)
3) DataInputStream(File f)
4) DataInputStream(String s)
Given the following code which of the following statements are true?
import java.io.*; public class Dos{ public static void main(String argv[]){ FileOutputStream fos = new FileOutputStream("fos.dat"); DataOutputStream dos = new DataOutputStream(fos); BufferedOutputStream bos = new BufferedOutputStream(dos); dos.write('8'); } }
1) The code will not compile
2) No compilation because BufferedOutputStream cannot have a DataOutputStream
constructor
3) The code will compile and write the byte 8 to the file
4) The code will compile and write the string "8" to the file
Which of the following are valid constructor
parameters?
1) File (String path);
2) File(String path, String name)
3) RandomAccessFile(File)
4) File(RandomAccesFile name)
Given the following code
import java.io.*; public class Ppvg{ public static void main(String argv[]){ Ppvg p = new Ppvg(); p.go(); } public void go(){ try{ DataInputStream dis = new DataInputStream(System.in); dis.read(); }catch(Exception e){} System.out.println("Continuing"); } }
Which of the following statements are true?
1) The code will compile and pause untill
a key is hit
2) The code will not compile because System.in
is a static class
3) The code will compile and run to completion
without output
4) The code will not compile because System.in
is not a valid constructor for DataInputStream
1) File
2) String
3) File descriptor
1) BufferedInputStream(FileInputStream in,
int size)
2) BufferedInputStream(FileInputStream in)
It should be fairly obvious that an InputStream would not take an instance of an outputstream (option 3) and the RandomAccesFile is not a stream class (option 4)
2) DataInputStream(FileInputStream in)
1) The code will not compile
The code will not compile because there is no try/catch block. A BufferedOutputStream may take a DataOutputStream as a constructor.
Which of the following are valid constructor parameters?
1) File (String path);
2) File(String path, String name)
RandomAccessFile must take a mode parameter (see the next section for details
of the RandomAccessFile class).
1) The code will compile and pause untill
a key is hit
The Sun API docs
Buffered I/O
http://java.sun.com/products/jdk/1.2/docs/api/java/io/BufferedInputStream.html
http://java.sun.com/products/jdk/1.2/docs/api/java/io/BufferedOutputStream.html
Data I/O streams
http://java.sun.com/products/jdk/1.2/docs/api/java/io/DataInputStream.html
http://java.sun.com/products/jdk/1.2/docs/api/java/io/DataOutputStream.html
Last updated
6 Nov 2000
copyright © Marcus Green 2000
most recent version at www.jchq.net