import java.io.IOException; import java.io.EOFException; import java.io.Serializable; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.BufferedOutputStream; import java.io.ObjectOutputStream; import java.io.BufferedInputStream; import java.io.ObjectInputStream; import java.nio.ByteBuffer; import java.nio.channels.FileChannel; public class SerialIO { public static void main(String[] args) throws IOException, ClassNotFoundException { StringBuffer name = new StringBuffer(); int[] grades = {0,0,0,0,0}; char c = ' '; //Create directory and file objects. File myDir = new File("testdir"); File textFile = new File(myDir,"StudentData.txt"); //Set up for input from text file. FileInputStream textStream = new FileInputStream(textFile); FileChannel textChannel = textStream.getChannel(); ByteBuffer textBuf = ByteBuffer.allocate(4000); //Set up for file output. File dataFile = new File(myDir,"StudentData"); FileOutputStream outStream = new FileOutputStream(dataFile); ObjectOutputStream outData = new ObjectOutputStream(new BufferedOutputStream(outStream)); //Read data from input file. textChannel.read(textBuf); textBuf.flip(); //Get name from text buffer. while(textBuf.hasRemaining()){ name.setLength(0); while((c = (char)textBuf.get()) != '\r') //Read up to and including return char name.append(c); c = (char)textBuf.get(); //Consume new line char System.out.println(name); //Get grades from text buffer. int numgrades = 0; while((c = (char)textBuf.get()) != '\r') { grades[numgrades] = 10*Character.digit(c,10) + Character.digit((char)textBuf.get(),10); numgrades++; } c = (char)textBuf.get(); //Consume new line char //Create Student object. Student aStudent = new Student(name,grades,numgrades); //Write Student object. outData.writeObject(aStudent); } textStream.close(); outData.close(); //Read data back in. FileInputStream inStream = null; try{ inStream = new FileInputStream(dataFile); ObjectInputStream inData = new ObjectInputStream(new BufferedInputStream(inStream)); while(true) { Student aStudent = (Student)inData.readObject(); System.out.println(aStudent.name); System.out.println(aStudent.grades[aStudent.grades.length-1]); } } catch(EOFException e) { inStream.close(); } } }