1 / 39

Input/Output and Serialization

Input/Output and Serialization. How the Java Platform Supports I/O. The package java.io supports console I/O and file I/O Console I/O is character keyboard input and output without the mouse graphics of a graphical user interface

lois-valdez
Download Presentation

Input/Output and Serialization

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Input/Output and Serialization Java Programming: Advanced Topics

  2. How the Java Platform Supports I/O • The package java.io supports console I/O and file I/O • Console I/O is character keyboard input and output without the mouse graphics of a graphical user interface • File I/O involves reading and writing data to and from a mass storage device, typically the computer’s hard drive • The new I/O (NIO) package java.nio supplements the original I/O package Java Programming: Advanced Topics

  3. Programming I/O • In stream I/O, characters or bytes are read or written sequentially • The Java platform includes two dual hierarchies of classes that support streams: • byte-oriented input and output • character-oriented input and output • The class RandomAccessFile is used to read and write arbitrary locations within a file without first having to read or write all the bytes or characters that precede that location Java Programming: Advanced Topics

  4. Byte-Oriented Stream Classes Java Programming: Advanced Topics

  5. Predefined Stream Objects • All Java programs can use three stream objects that are defined in the System class of the java.lang package: • System.in • The field System.in is a java.io.BufferedInputStream object • System.out • The field System.out is a java.io.PrintStream object • System.err • The field System.err is a java.io.PrintStream object Java Programming: Advanced Topics

  6. The print and println Methods Java Programming: Advanced Topics

  7. Input Methods • Input methods of the java.io.InputStream class: • int available() • void close() • void mark( int readlimit) • boolean markSupported() • int read() • int read(byte[] buffer) • int read( byte[] buffer, int offset, int length) • void reset() • long skip(long bytecount) Java Programming: Advanced Topics

  8. Output Methods • Output methods of the java.io.OutputStream class: • void close() • void flush() • void write( int b) • void write(byte[] buffer) • void write( byte[] buffer, int offset, int length) Java Programming: Advanced Topics

  9. Byte-Oriented Filter Streams Java Programming: Advanced Topics

  10. Other Byte I/O Classes • Extensions of InputStreaminclude the following classes: • The class ByteArrayInputStreamlets you read an array of bytes as though it were an InputStreamobject • The class SequenceInputStreamprovides a mechanism for concatenating the data from two or more InputStreamobjects into a single, seamless stream • The class PipedInputStreamimplements half of a pipe to connect the input stream of one thread or process to the output stream of another thread process Java Programming: Advanced Topics

  11. Other Byte I/O Classes • Extensions of OutputStreaminclude the following classes: • The class ByteArrayOutputStreamsends its output into an object of type byte • The class PipedOutputStreamis the complementary class to PipedInputStream Java Programming: Advanced Topics

  12. Console I/O Sample Program Java Programming: Advanced Topics

  13. Parsing an Input Stream • The next step after reading a line of input is to parse it, or break it into separate tokens • A token usually consists of a sequence of characters that does not include a space, newline, tab, or other nonprinting character • To tokenize a string, you can use the StringTokenizer class provided by the java.util package Java Programming: Advanced Topics

  14. File I/O Basics • To use a file associate the file with a FileInputStreamor FileOutputStreamobject • To access the data in a file in random-access order, open it as a RandomAccessFileobject, not as a FileInputStreamobject • In a network environment, applets can perform I/O only on files that reside on the server from which the applet originated Java Programming: Advanced Topics

  15. File Navigation Methods Java Programming: Advanced Topics

  16. An Example of File Input and Output Java Programming: Advanced Topics

  17. An Example of File Input and Output (Cont.) Java Programming: Advanced Topics

  18. An Example of File Input and Output (Cont.) Java Programming: Advanced Topics

  19. Random-Access File I/O • The class RandomAccessFile supports byte-oriented I/O to and from random-access files • The class RandomAccessFile extends Object • RandomAccessFile combines input and output operations in one class • The seek method selects the position within the file where the next I/O operation will begin Java Programming: Advanced Topics

  20. Character Streams Java Programming: Advanced Topics

  21. Connecting Byte and Character I/O Classes • The Java platform includes adapter classes that bridge between character I/O classes and byte I/O classes: • InputStreamReader • OutputStreamWriter Java Programming: Advanced Topics

  22. Using Other Character I/O Classes • Extensions of the Readerobject include the following: • The class CharArrayReaderlets you read an array of characters as though it were a Reader object • The class StringReaderlets you read a String object as though it were a Reader object • The class PipedReaderimplements half of a pipe and is especially useful for communication between threads. Java Programming: Advanced Topics

  23. Using Other Character I/O Classes • Extensions of the Writerobject include the following: • The class CharArrayWritersends its output into an object of type char[] • The class StringWriterlets you write to a StringBuffer object as though it were a Writerobject • The class PipedWriteris the complementary class to PipedReader • The class PrintWriteris the character I/O equivalent of the PrintStream class Java Programming: Advanced Topics

  24. The New I/O (NIO) Programming Interface • The java.nio package provides new features: • Support for buffer management • A new primitive I/O abstraction called a channel • File locking at the process level • Memory mapping Java Programming: Advanced Topics

  25. Buffers • Capacity: the maximum number of data elements that the buffer can contain • Limit: a reflection of the amount of data that the buffer currently contains and is defined as the index of the first element in the buffer that should not be read or written • Mark: the index to which the position value will be set if the buffer is reset  • Position: the index of the next element to be read or written and can never exceed the limit Java Programming: Advanced Topics

  26. Buffer Classes in java.nio Java Programming: Advanced Topics

  27. Channels • Channel: a flexible concept that includes any open connection to a program entity that is capable of I/O operations such as read or write Java Programming: Advanced Topics

  28. Channel Classes in java.nio.channels Java Programming: Advanced Topics

  29. An Example of File Channel I/O Java Programming: Advanced Topics

  30. An Example of File Channel I/O (Cont.) Java Programming: Advanced Topics

  31. An Example of File Channel I/O (Cont.) Java Programming: Advanced Topics

  32. Object Serialization • Object serialization:a general solution that lets you write objects to I/O streams and then read them, without defining any additional methods • Enables transmission of objects over a network or save objects to files between runs of your program • The object serialization feature is an important component of the Java Remote Method Invocation (RMI) enterprise API Java Programming: Advanced Topics

  33. Using Object Streams • Two stream classes support object serialization: • ObjectOutputStream - a subclass of OutputStream • ObjectInputStream - a subclass of InputStream • To create an ObjectOutputStream object, provide an existing OutputStream object as the argument of the constructor • To create an ObjectInputStream object, provide an existing InputStream object as the argument of the constructor Java Programming: Advanced Topics

  34. Suppressing Serialization of Fields • Include the qualifier transient when you declare fields to indicate that they should not be serialized with instances of the class • Fields that have the transient qualifier are not output when the object is serialized • When the object is deserialized later, transient fields are given the default value normally used for fields of their type Java Programming: Advanced Topics

  35. The readObject and writeObject Methods Java Programming: Advanced Topics

  36. The validateObject Method Java Programming: Advanced Topics

  37. Forcing Changed Objects to Be Serialized • Subsequent serialization operations for the same object copy only the object reference into the stream, even if the object has changed • A simple solution to this problem: • invoke the reset method for the ObjectOutputStream object, which causes the next serialization of an object to be treated as if it were the first Java Programming: Advanced Topics

  38. Specifying the Version Number • A version number is calculated using a formula that takes the name of the class and its interfaces, fields, and methods • Determine the value of the version number with the serialver tool supplied with the SDK • Define a serialVersionUID field and let the JVM generate one for you Java Programming: Advanced Topics

  39. Compatibility of Serialization Formats • To identify the serialization stream format used, Java 2 defines two new constants: PROTOCOL_VERSION_1 and PROTOCOL_VERSION_2, in the java.io.ObjectStreamConstants interface • The useProtocolVersion method takes a protocol version constant as input and updates the ObjectOutputStream object to use the corresponding serialization stream version Java Programming: Advanced Topics

More Related