680 likes | 850 Views
Dynamic Arrays. Dynamic arrays are arrays that are re-allocated to a larger size. See Eck Section 8.3 for details. For instance, what happens with the following? int numbers[] = {5, 4, 6, 7, 3, 4, 1, 1, 4}; int finalIndex = numbers.length + 5; for (int i = 0; i < finalIndex; i++)
E N D
Dynamic Arrays • Dynamic arrays are arrays that are re-allocated to a larger size. • See Eck Section 8.3 for details. • For instance, what happens with the following? int numbers[] = {5, 4, 6, 7, 3, 4, 1, 1, 4}; int finalIndex = numbers.length + 5; for (int i = 0; i < finalIndex; i++) System.out.println(“number is: “ + numbers[i]);
Dynamic Arrays • A dynamic array implementation would look like: int numbers[] = {5, 4, 6, 7, 3, 4, 1, 1, 4}; int finalIndex = numbers.length + 5; for (int i = 0; i < finalIndex; i++) { if (i == numbers.length) { int temp[] = new int[numbers.length * 2]; for (int j = 0; j < numbers.length; j++) temp[j] = numbers[j]; numbers = temp; } // end of if System.out.println(“number is: “ + numbers[i]); } // end of for
I/O Streams • What is a stream when programming? • import java.io.*; • What basic types of streams are there? • The parent classes are OutputStream and InputStream.
I/O Streams • What type of data can be transported over streams? • When must you use streams? • Data from files. • Data over a network. • Data between threads.
I/O Streams • A byte stream works with data that is machine formatted. • 1110 • A character stream works with data that is human readable. • 15 • Most human’s preferences are to work with this type of data.
Byte Streams • Using a byte stream will make your program faster. The data is already in a format that the program can work with. • The data is simply copied to and from the streams. • The primary byte stream classes are InputStream and OutputStream. • Why would this type of stream be important? • System.in and System.out are both byte streams.
Byte Streams • The InputStream class reads one byte at a time (a number between 0 and 255) using: public int read() throws IOException • When the end of the input is received, this function returns a –1. • What happens when this function encounters an error? • What must then be included in your program?
Byte Streams • The InputStream provides additional methods that permit reading multiple bytes at one time. • It does not provide the capability to read a series of bytes directly into an int, double, string, etc.
Byte Streams • The OuputStream class writes one byte at a time (a number between 0 and 255) using: public void write(int b) throws IOException
Byte Streams • The OutputStream provides additional methods that permit writing multiple bytes at one time. • Again, it does not provide the capability to write a series of bytes as an int, double, string, etc.
Character Streams • A character stream should be used if humans must be able to understand the data while working with the program. • The primary character stream classes are Reader and Writer. • Character streams translate the human formatted data into binary data. • Java uses Unicode and therefore can understand and translate many languages in the world including non-western languages.
Character Streams • Typically you will not directly use the Reader and Writer classes. • You will use subclasses for these classes. • The Reader and Writer classes allow you to read and write char values only.
PrintWriter Class • The PrintWriter class is a subclass of the Writer class. • To use the PrintWriter class you must wrap the Writer class in it as follows: PrintWriter outputData = new PrintWriter( new Writer() ); • In addition to creating a PrintWriter as above, one may also be constructed with an OutputStream as the parameter.
PrintWriter Class • The PrintWriter class provides print and println functions for each of the primitive data types. • These functions do not throw exceptions. • This does not mean that errors can not happen when writing data. • The checkError() function will return true if there was an error during writing.
DataOutputStream Class • The DataOutputStream enables a program translate primitive data types to binary data for writing to an OutputStream. • This class contains methods like: writeDouble(double x) and writeInt(int x). • To create an instance of a DataOutputStream: DataOutputStream dataOut = new DataOutputStream( new OutputStream() );
DataInputStream Class • The DataInputStream class permits binary data to be read directly into a primitive data type from an InputStream. • The class contains methods such as: readInt(),readChar(), and readUTF() • To create an instance of a DataInputStream: DataInputStream dataIn = new DataInputStream( new InputStream() );
Misc. • Data written by the DataOutputStream class is guaranteed to be in a format that can be read by the DataInputStream class.
TextReader Class • The TextReader class provides similar capabilities as the PrintWriter class. • NOTE: The TextReader class is NOT a standard Java class. • It was written by Eck. • Prof. Jenks expects that you will use the TextReader class for your assignments. • Keep in mind, that this class will not be available in the real world!
TextReader Class • The TextReader class is a subclass of the Reader Class. TextReader readText = new TextReader ( new Reader() ); • An InputStream can also be wrapped into a TextReader. TextReader readInput = new TextReader ( System.in );
TextReader Class • The TextReader class may throw exceptions. • Recall that the PrintWriter class does not throw exceptions. • By default the TextReader class will throw exceptions of the type TextReader.Error • The exceptions may be turned off by calling the TextReader’s checkIO (false) method. • To check for errors when the exceptions are turned off call the checkError() function.
Writing and Reading Objects • Can we use the previous capabilities to read or write object instances? • Why or why not?
Writing and Reading Objects • The ObjectInputStream and ObjectOutputStream classes can solve our dilemma. • Both of these classes can throw exceptions. • So your code must do what???
Reading an Object ObjectInputStream inObj = new ObjectInputStream( new InputStream() ); • The method for reading an object is: Object newObj = inObj.readObject(); • What if you want to read an object of type Car rather than type Object? • What is a potential problem of reading the wrong type of object?
Reading an Object • To verify that an Object is the type you expect before you type cast it, you should always use the following: Car newCar; if ( newObj instanceof Car) { newCar = newObj; }
Writing Objects ObjectOutputStream outObj = new ObjectOutputStream( new OutputStream() ); • The method for reading an object is: Car outputCar = new Car(“audi”, “A4”, “silver”); outObj.writeObject( (Object) outputCar );
Files • Why do we need files? • What are the components of a file? • What types of files are there (with regard to accessing data in the file)?
Files • Files in Java • Are sequential streams of bytes. • End with either an end-of-file marker or at a specific byte number recorded in a system maintained administrative data structure. • What happens when a stream is opened? • Should you close a file when you are done using it?
Files • Some interesting notes about files: • Opening a file for writing will erase any previous data stored into that file. • A file can be opened for writing using the append option, in which case the original contents of the file will not be lost. • Any new data will be placed at the end of the file.
Applets and Files • Applets that are downloaded over a network connections are not permitted to access files on your computer. • This is a security violation. • Stand alone programs on a particular computer can access files on that particular computer.
Files and machine format data • Java includes two classes that permit reading and writing of machine format information to and from files. • FileInputStream and FileOutputStream • In order to append data to an existing file during writing, instantiate the FileOutputStream as follows: FileOutputStream outFile = new FileOutputStream( “fileName”, true);
FileWriter Class • The FileWriter Class is used to write human readable data to a file. • Exception handling is required when using this class.
FileWriter Class FileWriter outData; try { outData = new FileWriter( “output.txt” ); } catch (IOException e) { System.err.println(“Exception: “ + e); }
FileWriter Class • The FileWriter Class contains only primitive read methods so it is common to wrap it in something like the PrintWriter class.
FileWriter Class PrintWriter outData; try { outData = new PrintWriter( new FileWriter( “outputData.txt” ) ); } catch (IOException e) { System.err.println( “Exception: “ + e ); }
FileReader Class • The FileReader class is similar to the FileWriter class except that it is used for reading files. • Since you have the TextReader class, you should wrap the FileReader class inside of it.
FileReader Class TextReader inData; try { inData = new TextReader( new FileReader( “inputData.txt” ) ); } catch (FileNotFoundException e) { System.err.println( “Exception: “ + e ); }
File Names • If a program needs to access a file in the current directory, then the program only needs the name of the file. • If the program needs to access a file in a directory other than the current directory, then the program needs the appropriate path name to the file directory.
Path Names • An absolute path name uniquely identifies a file from all other files on the system. ~jadams/UH/CSCI3134.ppt • A relative path name tells the program how to find the file from the current directory. ../../UH/CSCI3134.ppt
Path Names • Remember that path names vary from one type of machine to another. • It is best to use simple file names.
FileDialog Class • The FileDialog Class can be used to provide a platform independent file dialog box. • It can be used to create a dialog box that opens files for reading as well as create a dialog box for opening files for writing.
File Class • The File Class can be used to combine a path name and a file name into one entity that can be used to open the file. File file = new File(directoryPath, fileName); • The File Object can then be used to create a PrintWriter. PrintWriter out = new PrintWriter( new FileWriter( file ) );
File Class • An object of type File represents a file name not an actual file. • There are various methods in the class that allow the program to determine if the fileName is a file, a directory, if the file exists, etc.
Some Examples • FileCopy.java • ReverseFileJAA.java • WordList.java • TrivialEdit.java
Streams and Networks • A network is really just another input or output source for data to or from a program. • Java allows the use of input and output streams to process network communications. • Aside from importing the java.io.* package your program must also import the java.net.* package.
Networks • There are two types of network I/O in Java. • At a high level there is URL WWW based networks. • What type of Java programs would you expect would use this network capability? • At a lower level there is socket communications.
Networks • In order to work with either type of network, a program must connect to the network.
URL Class • The URL Class is used to work with resources in the WWW. • An instance of the URL Class represents a URL address. • This class instance can be used to create a connection between your computer and the resource at the specified URL.
URL Class • The getContent() method returns an instance of type Object containing the text file, image, or other resources found on the web at the given URL.
URL Class • The Applet class contains the method getDocumentBase() that returns a URL object which represents the location from which the HTML page containing the applet was downloaded. • This information can be used to go back and access other information at the same location.
URL Class • The URL instance can be used to create a stream to access data at that location. URL address = new URL( getDocumentBase(), “data.txt” ); InputStream in = address.openStream(); • The openStream() method opens the network connection. • Typically you will find the InputStream wrapped inside a DataInputStream or TextReader class. • Why?