Object-oriented design CSE 432: Object-Oriented Software Engineering.
Object-Oriented Programming Design Topic : Streams and Files
description
Transcript of Object-Oriented Programming Design Topic : Streams and Files
Apr 20, 2023
Air Force Institute of TechnologyElectrical and Computer Engineering
Object-Oriented Programming Design
Topic : Streams and Files
Maj Joel YoungJoel [email protected].
Maj Joel Young
Air Force Institute of TechnologyElectrical and Computer EngineeringApr 20, 2023 2
Object-Oriented Programming
DesignJava Input/Output
• Java implements input/output in terms of streams of characters– Streams have a producer, or source– Streams have a consumer, or sink– Sometimes sources are sinks depending on use
(a file can be both a source and a sink)
Source Sink
programs, userinput, etc.
files, console,sockets, etc.
Air Force Institute of TechnologyElectrical and Computer EngineeringApr 20, 2023 3
Object-Oriented Programming
DesignI/O Processors
• Control over the stream is improved by adding processors– Convert char streams to integers, doubles, strings, etc.– Perform filtering– Buffer characters to improve read performance
Source SinkProcessor
Air Force Institute of TechnologyElectrical and Computer EngineeringApr 20, 2023 4
Object-Oriented Programming
DesignData Sinks/Sources
• Several kinds of data streams in Java
FileReader
PipeReader Processor(s)
StringReader
CharArrayReader
Processor(s)
FileWriter
PipeWriter
StringWriter
CharArrayWriter
Input Streams(Application is Sink)
Output Streams(Application is Source)
Air Force Institute of TechnologyElectrical and Computer EngineeringApr 20, 2023 5
Object-Oriented Programming
DesignThe “Pipeline” Concept
• Writing Data: Start with a sink, such as a FileOutputStream• Writes only one byte at a time (or an array of bytes), not
very efficient – so we add a buffer manager • Can still only write a byte (or array of bytes), so we add a
DataOutputStream to allow more complex types
DataOutputStream
DataOutputStream
double,int, char,String, etc.
BufferedOutputStream
BufferedOutputStream
bytes bytes
HardDiskHardDisk
FileOutputStream
FileOutputStream
bytes
Air Force Institute of TechnologyElectrical and Computer EngineeringApr 20, 2023 6
Object-Oriented Programming
DesignThe “Pipeline” Concept
• Reading Data: Start with a source, such as a FileInputStream
• Reads only one byte at a time (or an array of bytes), not very efficient – so we add a buffer manager
• Can still only read a byte (or array of bytes), so we add a DataInputStream to allow more complex types
DataInputStream
DataInputStream
double,int, char,String, etc.
BufferedInputStream
BufferedInputStream
bytes bytes
HardDiskHardDisk
FileInputStream
FileInputStream
bytes
Air Force Institute of TechnologyElectrical and Computer EngineeringApr 20, 2023 7
Object-Oriented Programming
DesignFile Streams
• File Streams (Byte Stream Classes)– FileInputStream: read bytes/arrays of bytes– FileOutputStream: write bytes/arrays of bytes
import java.io.*;public class Copy { public static void main(String[] args) throws IOException {
FileInputStream in = new FileInputStream(“source.dat”); FileOutputStream out = new FileOutputStream(“dest.dat”); int c;
while ((c = in.read()) != -1) out.write(c);
in.close(); out.close(); }}
Air Force Institute of TechnologyElectrical and Computer EngineeringApr 20, 2023 8
Object-Oriented Programming
DesignFile Streams
• Add DataInputStream/DataOutputStream – Provides read/write methods for primitives– Provides read/write methods for unicode strings
import java.io.*;public class Test { public static void main(String[] args) throws IOException { FileOutputStream fos = new FileOutputStream(“output.dat”); DataOutputStream dos = new DataOutputStream(fos); dos.writeDouble(64.356); dos.close(); FileInputStream fis = new FileInputStream(“output.dat”); DataInputStream dis = new DataInputStream(fis); double test = dis.readDouble(); System.out.println( test ); dis.close(); }}
Air Force Institute of TechnologyElectrical and Computer EngineeringApr 20, 2023 9
Object-Oriented Programming
DesignFile Streams
• Can keep adding processors ...• Add buffered input/output
import java.io.*;public class Test2 { public static void main(String[] args) throws IOException { FileOutputStream fos = new FileOutputStream(“output.dat”); BufferedOutputStream bos = new BufferedOutputStream(fos); DataOutputStream dos = new DataOutputStream(bos); dos.writeDouble(64.356); dos.close(); FileInputStream fis = new FileInputStream(“output.dat”); BufferedInputStream bis = new BufferedInputStream(fis); DataInputStream dis = new DataInputStream(bis); double test = dis.readDouble(); System.out.println( test ); dis.close(); }}
Air Force Institute of TechnologyElectrical and Computer EngineeringApr 20, 2023 10
Object-Oriented Programming
DesignFile Streams
• File Streams (Character Stream Classes)– FileReader: read chars/arrays of chars– FileWriter: write chars/arrays of chars
import java.io.*;public class Copy2 { public static void main(String[] args) throws IOException {
FileReader in = new FileReader(“source.dat”); FileWriter out = new FileWriter(“dest.dat”); int c;
while ((c = in.read()) != -1) out.write(c);
in.close(); out.close(); }}
Air Force Institute of TechnologyElectrical and Computer EngineeringApr 20, 2023 11
Object-Oriented Programming
DesignASCII Files
• Problem: ASCII uses 8-bit chars, but Java uses 16-bit Unicode chars – how do we read plain-text files?– InputStreamReader: Translates input bytes to Unicode
public class Copy { public static void main(String[] args) throws IOException { FileInputStream in = new FileInputStream(“source.dat”); InputStreamReader isr = new InputStreamReader(in); BufferedReader br = new BufferedReader(isr); String line = br.readLine(); // Read a line of text
while (line != null) // Any more text to read? { System.out.println(line); // Print the text to the console line = br.readLine(); // Read more text } br.close(); }}
Air Force Institute of TechnologyElectrical and Computer EngineeringApr 20, 2023 12
Object-Oriented Programming
Design
ASCII Formatted Numbers &Variable Length Strings
class Test{ static public void main(String args[]) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader( new FileInputStream(“test.dat”))); String line = br.readLine(); // Get first line of text StringTokenizer st; int studentNum; double gradeAvg; String name; while (line != null) { st = new StringTokenizer(line); studentNum = Integer.parseInt(st.nextToken()); gradeAvg = Double.parseDouble(st.nextToken()); name = st.nextToken(); while (st.hasMoreTokens()) { name = name + “ “ + st.nextToken(); } System.out.println(studentNum+”,”+gradeAvg+”,”+name); line = br.readLine(); } } }
1 4.0 Smith, Joe 2 2.8 Jones, Jim Bob3 3.9 Doe, Tricia. . .
Air Force Institute of TechnologyElectrical and Computer EngineeringApr 20, 2023 13
Object-Oriented Programming
DesignConsole I/O
• PrintStream
– Heavily overloaded versions of print() for:– print(int n)– print(double d)– print(float f)– print(String s)– …
– Version called println() puts a newline character after the formatted text
Air Force Institute of TechnologyElectrical and Computer EngineeringApr 20, 2023 14
Object-Oriented Programming
DesignSystem.in & System.out
• Like C++ keeps “stdin” and “stdout” streams open at all times– System.in is a class attribute of type InputStream– System.out is a class attribute of type PrintStream
import java.io.*;public class Test { public static void main(String[] args) throws IOException { System.out.print(“Here’s a string: ”); System.out.println(10); // Integer 10 w/new line break }}