Object-Oriented Programming Design Topic : Streams and Files

14
Aug 28, 2022 Air Force Institute of Technology Electrical and Computer Engineering Object-Oriented Programming Design Topic : Streams and Files Maj Joel Young Joel [email protected]. Maj Joel Young

description

Object-Oriented Programming Design Topic : Streams and Files. Maj Joel Young Joel [email protected]. Maj Joel Young. Java Input/Output. Source. Sink. programs, user input, etc. files, console, sockets, etc. Java implements input/output in terms of streams of characters - PowerPoint PPT Presentation

Transcript of Object-Oriented Programming Design Topic : Streams and Files

Page 1: 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

Page 2: Object-Oriented Programming Design Topic :   Streams and Files

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.

Page 3: Object-Oriented Programming Design Topic :   Streams and Files

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

Page 4: Object-Oriented Programming Design Topic :   Streams and Files

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)

Page 5: Object-Oriented Programming Design Topic :   Streams and Files

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

Page 6: Object-Oriented Programming Design Topic :   Streams and Files

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

Page 7: Object-Oriented Programming Design Topic :   Streams and Files

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(); }}

Page 8: Object-Oriented Programming Design Topic :   Streams and Files

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(); }}

Page 9: Object-Oriented Programming Design Topic :   Streams and Files

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(); }}

Page 10: Object-Oriented Programming Design Topic :   Streams and Files

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(); }}

Page 11: Object-Oriented Programming Design Topic :   Streams and Files

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(); }}

Page 12: Object-Oriented Programming Design Topic :   Streams and Files

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. . .

Page 13: Object-Oriented Programming Design Topic :   Streams and Files

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

Page 14: Object-Oriented Programming Design Topic :   Streams and Files

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 }}