1 CS2136: Paradigms of Computation Class 23: Java I/O Intro to Java Networking Copyright 2001, 2002,...
-
Upload
hubert-george -
Category
Documents
-
view
218 -
download
1
Transcript of 1 CS2136: Paradigms of Computation Class 23: Java I/O Intro to Java Networking Copyright 2001, 2002,...
![Page 1: 1 CS2136: Paradigms of Computation Class 23: Java I/O Intro to Java Networking Copyright 2001, 2002, 2003 Michael J. Ciaraldi and David Finkel.](https://reader036.fdocuments.us/reader036/viewer/2022062515/56649f575503460f94c7c852/html5/thumbnails/1.jpg)
1
CS2136:Paradigms of Computation
Class 23:Java I/O
Intro to Java Networking
Copyright 2001, 2002, 2003 Michael J. Ciaraldi and David Finkel
![Page 2: 1 CS2136: Paradigms of Computation Class 23: Java I/O Intro to Java Networking Copyright 2001, 2002, 2003 Michael J. Ciaraldi and David Finkel.](https://reader036.fdocuments.us/reader036/viewer/2022062515/56649f575503460f94c7c852/html5/thumbnails/2.jpg)
2
Java Input / Output
![Page 3: 1 CS2136: Paradigms of Computation Class 23: Java I/O Intro to Java Networking Copyright 2001, 2002, 2003 Michael J. Ciaraldi and David Finkel.](https://reader036.fdocuments.us/reader036/viewer/2022062515/56649f575503460f94c7c852/html5/thumbnails/3.jpg)
3
Multiple Uses for I/OBytes
Could be:Bytes in generalText.
Could beKeyboard & screen (basically text)Named filesStandard input, output, and error (could be
redirected). Covered today.
Graphics screen, keyboard, and mouse. Swing
Network Sockets, RMI
![Page 4: 1 CS2136: Paradigms of Computation Class 23: Java I/O Intro to Java Networking Copyright 2001, 2002, 2003 Michael J. Ciaraldi and David Finkel.](https://reader036.fdocuments.us/reader036/viewer/2022062515/56649f575503460f94c7c852/html5/thumbnails/4.jpg)
4
Java Byte Input & Output
Output is easy For text, just use print(), println(),
toString(). For others, use write() and its relatives. Java was not strong on formatting.
Improved in JDK 1.1
Input is harder.You don’t know the type of data
beforehand.
![Page 5: 1 CS2136: Paradigms of Computation Class 23: Java I/O Intro to Java Networking Copyright 2001, 2002, 2003 Michael J. Ciaraldi and David Finkel.](https://reader036.fdocuments.us/reader036/viewer/2022062515/56649f575503460f94c7c852/html5/thumbnails/5.jpg)
5
Java Byte Input & Output II
There were changes between Java 1.0 and 1.1 . Mostly to support I18n
(internationalization / internationalisation) by using Unicode.
You still need many of the old ways.
![Page 6: 1 CS2136: Paradigms of Computation Class 23: Java I/O Intro to Java Networking Copyright 2001, 2002, 2003 Michael J. Ciaraldi and David Finkel.](https://reader036.fdocuments.us/reader036/viewer/2022062515/56649f575503460f94c7c852/html5/thumbnails/6.jpg)
6
Basics of Byte I/O
There are basic I/O classes (which you don’t often use), with many subclasses. InputStream OutputStream
You create streams (or have them passed in from outside)..
Then you wrap them by creating other objects.
![Page 7: 1 CS2136: Paradigms of Computation Class 23: Java I/O Intro to Java Networking Copyright 2001, 2002, 2003 Michael J. Ciaraldi and David Finkel.](https://reader036.fdocuments.us/reader036/viewer/2022062515/56649f575503460f94c7c852/html5/thumbnails/7.jpg)
7
Layering
Each class can wrap the one within it.
Maintains the same interface. Lets you access consistently.
![Page 8: 1 CS2136: Paradigms of Computation Class 23: Java I/O Intro to Java Networking Copyright 2001, 2002, 2003 Michael J. Ciaraldi and David Finkel.](https://reader036.fdocuments.us/reader036/viewer/2022062515/56649f575503460f94c7c852/html5/thumbnails/8.jpg)
8
Output Classes
PrintStreamFileOutputStreamFileOutputStreamDataOutputStreamBufferedOutputStream
![Page 9: 1 CS2136: Paradigms of Computation Class 23: Java I/O Intro to Java Networking Copyright 2001, 2002, 2003 Michael J. Ciaraldi and David Finkel.](https://reader036.fdocuments.us/reader036/viewer/2022062515/56649f575503460f94c7c852/html5/thumbnails/9.jpg)
9
Output Classes: PrintStreamWrites formatted (text) output.Examples: System.out and System.errConstructors
PrintStream(OutputStream out, boolean autoFlush)Flush after each newline: true/false.
PrintStream(OutputStream out)autoFlush defaults to false.
Use print() and println().
![Page 10: 1 CS2136: Paradigms of Computation Class 23: Java I/O Intro to Java Networking Copyright 2001, 2002, 2003 Michael J. Ciaraldi and David Finkel.](https://reader036.fdocuments.us/reader036/viewer/2022062515/56649f575503460f94c7c852/html5/thumbnails/10.jpg)
10
Output Classes: FileOutputStreamWrites raw (unformatted) output.Constructors
FileOutputStream(String name) FileOutputStream(String name, boolean
append) FileOutputStream(File file) FileOutputStream(FileDescriptor fdObj)
Use write(). Argument: a byte or bytes.
![Page 11: 1 CS2136: Paradigms of Computation Class 23: Java I/O Intro to Java Networking Copyright 2001, 2002, 2003 Michael J. Ciaraldi and David Finkel.](https://reader036.fdocuments.us/reader036/viewer/2022062515/56649f575503460f94c7c852/html5/thumbnails/11.jpg)
11
Output Classes: DataOutputStreamWrites primitives, readable by
DataInputStreamWrite using:
write(), writeByte(), writeBytes() writeBoolean() writeDouble() etc.
![Page 12: 1 CS2136: Paradigms of Computation Class 23: Java I/O Intro to Java Networking Copyright 2001, 2002, 2003 Michael J. Ciaraldi and David Finkel.](https://reader036.fdocuments.us/reader036/viewer/2022062515/56649f575503460f94c7c852/html5/thumbnails/12.jpg)
12
Output Classes:BufferedOutputStream
Does not call the OS for each byte.Good for files.
![Page 13: 1 CS2136: Paradigms of Computation Class 23: Java I/O Intro to Java Networking Copyright 2001, 2002, 2003 Michael J. Ciaraldi and David Finkel.](https://reader036.fdocuments.us/reader036/viewer/2022062515/56649f575503460f94c7c852/html5/thumbnails/13.jpg)
13
OutputStream Methods
flush() Forces a write to underlying stream.
close() Flushes, then closes the stream.
![Page 14: 1 CS2136: Paradigms of Computation Class 23: Java I/O Intro to Java Networking Copyright 2001, 2002, 2003 Michael J. Ciaraldi and David Finkel.](https://reader036.fdocuments.us/reader036/viewer/2022062515/56649f575503460f94c7c852/html5/thumbnails/14.jpg)
14
Example(adapted from IOStreamDemo.java)
PrintStream out1 = new PrintStream( new BufferedOutputStream( new
FileOutputStream("IODemo.out")));out1.println(“Hello, file system!”);out1.close(); // Always do this when done.
![Page 15: 1 CS2136: Paradigms of Computation Class 23: Java I/O Intro to Java Networking Copyright 2001, 2002, 2003 Michael J. Ciaraldi and David Finkel.](https://reader036.fdocuments.us/reader036/viewer/2022062515/56649f575503460f94c7c852/html5/thumbnails/15.jpg)
15
Example:MyIOStreamDemo.java (part 5)
// 5. Storing & recovering dataDataOutputStream out2 = new DataOutputStream( new BufferedOutputStream( new FileOutputStream("Data.txt")));out2.writeBytes("Here's the value of pi: \n");out2.writeDouble(3.14159);out2.close();
![Page 16: 1 CS2136: Paradigms of Computation Class 23: Java I/O Intro to Java Networking Copyright 2001, 2002, 2003 Michael J. Ciaraldi and David Finkel.](https://reader036.fdocuments.us/reader036/viewer/2022062515/56649f575503460f94c7c852/html5/thumbnails/16.jpg)
16
Input Classes
InputStreamFileInputStreamBufferedInputStreamDataInputStream
![Page 17: 1 CS2136: Paradigms of Computation Class 23: Java I/O Intro to Java Networking Copyright 2001, 2002, 2003 Michael J. Ciaraldi and David Finkel.](https://reader036.fdocuments.us/reader036/viewer/2022062515/56649f575503460f94c7c852/html5/thumbnails/17.jpg)
17
Input Classes:InputStream
Reads raw (unformatted, binary) input.Example: System.inNo Constructors
All abstract.Methods:
read() close() available()
# bytes you could read.
![Page 18: 1 CS2136: Paradigms of Computation Class 23: Java I/O Intro to Java Networking Copyright 2001, 2002, 2003 Michael J. Ciaraldi and David Finkel.](https://reader036.fdocuments.us/reader036/viewer/2022062515/56649f575503460f94c7c852/html5/thumbnails/18.jpg)
18
Input Classes: FileInputStreamReads raw (unformatted) input.Constructors
FileInputStream(String name) FileInputStream(File file) FileInputStream(FileDescriptor fdObj)
Use read(). Argument: a byte or bytes.
![Page 19: 1 CS2136: Paradigms of Computation Class 23: Java I/O Intro to Java Networking Copyright 2001, 2002, 2003 Michael J. Ciaraldi and David Finkel.](https://reader036.fdocuments.us/reader036/viewer/2022062515/56649f575503460f94c7c852/html5/thumbnails/19.jpg)
19
Input Classes:BufferedInputStream
Reads raw (unformatted, binary) input.
Constructors: BufferedInputStream(InputStream in) BufferedInputStream(InputStream in, int
size)Other methods like InputStream.
![Page 20: 1 CS2136: Paradigms of Computation Class 23: Java I/O Intro to Java Networking Copyright 2001, 2002, 2003 Michael J. Ciaraldi and David Finkel.](https://reader036.fdocuments.us/reader036/viewer/2022062515/56649f575503460f94c7c852/html5/thumbnails/20.jpg)
20
Input Classes: DataInputStreamReads primitives, as written by
DataOutputStreamConstructor:
DataInputStream(InputStream in)Read using:
read(), readByte() readBoolean() readDouble(), etc. readLine()
Deprecated, but still needed.
![Page 21: 1 CS2136: Paradigms of Computation Class 23: Java I/O Intro to Java Networking Copyright 2001, 2002, 2003 Michael J. Ciaraldi and David Finkel.](https://reader036.fdocuments.us/reader036/viewer/2022062515/56649f575503460f94c7c852/html5/thumbnails/21.jpg)
21
So How Do You Read Anything Useful?
DataInputStream and DataOutputStream are good for raw data.
DataInputStream only works for: Individual bytes. Primitives where you know the exact
sequence.
![Page 22: 1 CS2136: Paradigms of Computation Class 23: Java I/O Intro to Java Networking Copyright 2001, 2002, 2003 Michael J. Ciaraldi and David Finkel.](https://reader036.fdocuments.us/reader036/viewer/2022062515/56649f575503460f94c7c852/html5/thumbnails/22.jpg)
22
So How Do You Read Anything Useful? (cont.)
You can use StreamTokenizer to parse as you read the input.
Or, read in a line with readLine() and parse the resulting string. By yourself -OR- Use StringTokenizer.
![Page 23: 1 CS2136: Paradigms of Computation Class 23: Java I/O Intro to Java Networking Copyright 2001, 2002, 2003 Michael J. Ciaraldi and David Finkel.](https://reader036.fdocuments.us/reader036/viewer/2022062515/56649f575503460f94c7c852/html5/thumbnails/23.jpg)
23
Parsing Input Lines
You need to: Divide the input string into tokens.
Token = a sequence of characters treated as a unit.
Process each token.Recognizing tokens:
Might be separated by delimiters. Might fit some pattern.
![Page 24: 1 CS2136: Paradigms of Computation Class 23: Java I/O Intro to Java Networking Copyright 2001, 2002, 2003 Michael J. Ciaraldi and David Finkel.](https://reader036.fdocuments.us/reader036/viewer/2022062515/56649f575503460f94c7c852/html5/thumbnails/24.jpg)
24
StringTokenizer
Recognizes tokens by delimitersConstructors:
StringTokenizer(String str) StringTokenizer(String str, String delim) StringTokenizer(String str, String delim,
boolean returnTokens) Defaults:
delim = “ \t\n\r\f“returnTokens = false (i.e. delimiters do not
count as tokens).
![Page 25: 1 CS2136: Paradigms of Computation Class 23: Java I/O Intro to Java Networking Copyright 2001, 2002, 2003 Michael J. Ciaraldi and David Finkel.](https://reader036.fdocuments.us/reader036/viewer/2022062515/56649f575503460f94c7c852/html5/thumbnails/25.jpg)
25
StringTokenizer II
Must set up for each string.Methods:
boolean hasMoreTokens() a.k.a. hasMoreElements()
int countTokens() String nextToken() String nextToken(String delim)
updates delim
Object nextElement()Same as nextToken except for return type.
![Page 26: 1 CS2136: Paradigms of Computation Class 23: Java I/O Intro to Java Networking Copyright 2001, 2002, 2003 Michael J. Ciaraldi and David Finkel.](https://reader036.fdocuments.us/reader036/viewer/2022062515/56649f575503460f94c7c852/html5/thumbnails/26.jpg)
26
Now What?
Need to parse the token.Methods for various types (all take a
String): parseFloat(), parseDouble() parseByte(), parseShort, parseInt(),
parseLongThrow NumberFormatException
![Page 27: 1 CS2136: Paradigms of Computation Class 23: Java I/O Intro to Java Networking Copyright 2001, 2002, 2003 Michael J. Ciaraldi and David Finkel.](https://reader036.fdocuments.us/reader036/viewer/2022062515/56649f575503460f94c7c852/html5/thumbnails/27.jpg)
27
Fixed Format I/O
Input:1) Read the line.2) Chop into substrings.3) Parse each substring.
Output:1) Use NumberFormat to convert
numbers into formatted Strings.2) Concatenate Strings.3) Output the final String.
![Page 28: 1 CS2136: Paradigms of Computation Class 23: Java I/O Intro to Java Networking Copyright 2001, 2002, 2003 Michael J. Ciaraldi and David Finkel.](https://reader036.fdocuments.us/reader036/viewer/2022062515/56649f575503460f94c7c852/html5/thumbnails/28.jpg)
28
Java Networking
![Page 29: 1 CS2136: Paradigms of Computation Class 23: Java I/O Intro to Java Networking Copyright 2001, 2002, 2003 Michael J. Ciaraldi and David Finkel.](https://reader036.fdocuments.us/reader036/viewer/2022062515/56649f575503460f94c7c852/html5/thumbnails/29.jpg)
29
Java Networking
Java can open sockets to other machines.
Java has higher-level functions. HTTP HTML
Access Applications can connect to any
machine. Applets can only connect to the
machine they downloaded from.
![Page 30: 1 CS2136: Paradigms of Computation Class 23: Java I/O Intro to Java Networking Copyright 2001, 2002, 2003 Michael J. Ciaraldi and David Finkel.](https://reader036.fdocuments.us/reader036/viewer/2022062515/56649f575503460f94c7c852/html5/thumbnails/30.jpg)
30
Internet Addressing
Every host on the Internet has one or more numeric IP addresses. Written as 130.215.24.65 Internally, a 32-bit integer (currently).
A host can have one or more names. ccc.wpi.edu
Domain Name System (DNS) On Unix: nslookup
![Page 31: 1 CS2136: Paradigms of Computation Class 23: Java I/O Intro to Java Networking Copyright 2001, 2002, 2003 Michael J. Ciaraldi and David Finkel.](https://reader036.fdocuments.us/reader036/viewer/2022062515/56649f575503460f94c7c852/html5/thumbnails/31.jpg)
31
Java Internet Addressing
Class InetAddress Holds an Internet (IP) address. Internal structure not specified.
![Page 32: 1 CS2136: Paradigms of Computation Class 23: Java I/O Intro to Java Networking Copyright 2001, 2002, 2003 Michael J. Ciaraldi and David Finkel.](https://reader036.fdocuments.us/reader036/viewer/2022062515/56649f575503460f94c7c852/html5/thumbnails/32.jpg)
32
Static Methods inClass InetAddress
getByName() public static InetAddress getByName(String
host) throws UnknownHostException host can be:
Name, e.g. “ccc.wpi.edu”Address, e.g. “130.215.24.65”
Returns a new InetAddress object.getLocalHost()
public static InetAddress getLocalHost() throws UnknownHostException
![Page 33: 1 CS2136: Paradigms of Computation Class 23: Java I/O Intro to Java Networking Copyright 2001, 2002, 2003 Michael J. Ciaraldi and David Finkel.](https://reader036.fdocuments.us/reader036/viewer/2022062515/56649f575503460f94c7c852/html5/thumbnails/33.jpg)
33
Regular Methods inClass InetAddress
String getHostName() Returns, e.g. “ccc.wpi.edu”
String getHostAddress() Returns, e.g. “130.215.24.65”
![Page 34: 1 CS2136: Paradigms of Computation Class 23: Java I/O Intro to Java Networking Copyright 2001, 2002, 2003 Michael J. Ciaraldi and David Finkel.](https://reader036.fdocuments.us/reader036/viewer/2022062515/56649f575503460f94c7c852/html5/thumbnails/34.jpg)
34
Example: WhoAmI.javaimport java.net.*;public class WhoAmI { public static void main(String[] args) throws Exception { if(args.length != 1) { System.err.println("Usage:
WhoAmI” + “ MachineName"); System.exit(1); } InetAddress a = InetAddress.getByName(args[0]); System.out.println(a); }}
![Page 35: 1 CS2136: Paradigms of Computation Class 23: Java I/O Intro to Java Networking Copyright 2001, 2002, 2003 Michael J. Ciaraldi and David Finkel.](https://reader036.fdocuments.us/reader036/viewer/2022062515/56649f575503460f94c7c852/html5/thumbnails/35.jpg)
35
ConnectingEach host has “ports” to connect to.Standard servers are waiting on
“well-known ports”. 7 = echo 13 = daytime 19 = chargen 23 = telnet 25 = SMTP 80 = HTTP
Socket = connection to port.
![Page 36: 1 CS2136: Paradigms of Computation Class 23: Java I/O Intro to Java Networking Copyright 2001, 2002, 2003 Michael J. Ciaraldi and David Finkel.](https://reader036.fdocuments.us/reader036/viewer/2022062515/56649f575503460f94c7c852/html5/thumbnails/36.jpg)
36
Connecting Methods
Socket(InetAddress address, int port) throws IOException Returns a Socket.
void close()InputStream getInputStream()
throws IOExceptionOutputStream getOutputStream()
throws IOException
![Page 37: 1 CS2136: Paradigms of Computation Class 23: Java I/O Intro to Java Networking Copyright 2001, 2002, 2003 Michael J. Ciaraldi and David Finkel.](https://reader036.fdocuments.us/reader036/viewer/2022062515/56649f575503460f94c7c852/html5/thumbnails/37.jpg)
37
More Socket Methods
int getPort()int getLocalPort()InetAddress getInetAddress()InetAddress getLocalAddress()
![Page 38: 1 CS2136: Paradigms of Computation Class 23: Java I/O Intro to Java Networking Copyright 2001, 2002, 2003 Michael J. Ciaraldi and David Finkel.](https://reader036.fdocuments.us/reader036/viewer/2022062515/56649f575503460f94c7c852/html5/thumbnails/38.jpg)
38
Example: MyDaytimeClient.java
String host; // Host nameint port; // Port number to connect toint DAYTIME_PORT = 13;
if (args.length < 1) host = "localhost"; else host = args[0];if (args.length < 2) port = DAYTIME_PORT; else port = Integer.parseInt(args[1]);InetAddress addr = InetAddress.getByName(host);System.out.println("Connecting to " + addr);Socket socket = new Socket(addr, port);
![Page 39: 1 CS2136: Paradigms of Computation Class 23: Java I/O Intro to Java Networking Copyright 2001, 2002, 2003 Michael J. Ciaraldi and David Finkel.](https://reader036.fdocuments.us/reader036/viewer/2022062515/56649f575503460f94c7c852/html5/thumbnails/39.jpg)
39
MyDaytimeClient.java(continued)try { System.out.println("socket = " + socket); BufferedReader in = new BufferedReader( new InputStreamReader( socket.getInputStream())); // read and print input for(int i = 0; i < 2; i++) { String str = in.readLine(); System.out.println(str); } } finally {} System.out.println("closing..."); socket.close(); }
![Page 40: 1 CS2136: Paradigms of Computation Class 23: Java I/O Intro to Java Networking Copyright 2001, 2002, 2003 Michael J. Ciaraldi and David Finkel.](https://reader036.fdocuments.us/reader036/viewer/2022062515/56649f575503460f94c7c852/html5/thumbnails/40.jpg)
40
Input and Output: MyEchoClient.javaPrintWriter out = new PrintWriter(new BufferedWriter( new OutputStreamWriter(socket.getOutputStream())),true);try { Thread.currentThread().sleep(1000);} catch(InterruptedException e) {};// read and print inputString str;for(int i = 0; i < 10; i++) { out.println("Howdy " + i); str = in.readLine(); if (str != null) System.out.println(str); }}
![Page 41: 1 CS2136: Paradigms of Computation Class 23: Java I/O Intro to Java Networking Copyright 2001, 2002, 2003 Michael J. Ciaraldi and David Finkel.](https://reader036.fdocuments.us/reader036/viewer/2022062515/56649f575503460f94c7c852/html5/thumbnails/41.jpg)
41
Next Time
Future of JavaWrapup: Programming paradigms