001    
002    
003    import java.io.IOException;
004    import java.io.OutputStream;
005    import java.io.InputStream;
006    import java.io.ByteArrayOutputStream;
007    import java.io.ByteArrayInputStream;
008    import java.io.ObjectOutputStream;
009    import java.io.ObjectInputStream;
010    import java.io.FileOutputStream;
011    import java.io.FileInputStream;
012    import java.io.FileNotFoundException;
013    
014    import java.nio.ByteBuffer;
015    import java.nio.channels.FileChannel;
016    
017    
018    /**
019     * Versuch mit Object Streams und nio.Buffer
020     */
021    
022    public class ObjectBufferTest {
023    
024        final static int SIZE = 4*1024; 
025    
026        public static void main( String[] args ) {
027            testOutput();
028            testInput();
029        }
030    
031    
032        /**
033         * Output 3 objects to a file using a buffer.
034         */
035        private static void testOutput() {
036            ByteBuffer bbd = ByteBuffer.allocate( SIZE );
037            bbd.clear();
038            ObjectBuffer ob = new ObjectBuffer( bbd );
039            System.out.println("ob = " + ob );
040    
041            try {
042                Object tmp = new java.util.HashMap(44);
043                System.out.println("tmp = " + tmp);
044                ob.put( tmp );
045    
046                tmp = new java.util.Date();
047                System.out.println("tmp = " + tmp);
048                ob.put( tmp );
049    
050                tmp = new java.math.BigInteger("393993");
051                System.out.println("tmp = " + tmp);
052                ob.put( tmp );
053            } catch(IOException e) {
054                e.printStackTrace();
055                return;
056            }
057            System.out.println("ob = " + ob );
058            bbd.flip();
059    
060            String filename = "File2Name";
061            FileOutputStream fos = null;
062            try {
063                fos = new FileOutputStream( filename /*, true*/ );
064            } catch(IOException e) {
065                e.printStackTrace();
066                return;
067            }
068            FileChannel fc = fos.getChannel();
069            try {
070                fc.write( bbd );
071                fc.force(true);
072                fc.close();
073            } catch(IOException e) {
074                e.printStackTrace();
075                return;
076            }
077            //System.out.println("bbd = " + bbd );
078            bbd.rewind();
079            //System.out.println("bbd.size = " + bbd.limit() );
080            System.out.println("+++------------------");
081        }
082    
083    
084    
085        /**
086         * Input 3 objects from a file using a buffer.
087         */
088        private static void testInput( ) {
089            String filename = "File2Name";
090            FileInputStream fis = null;
091            try {
092                fis = new FileInputStream( filename );
093            } catch(IOException e) {
094                e.printStackTrace();
095                return;
096            }
097            FileChannel fc = fis.getChannel();
098            ByteBuffer bbw = ByteBuffer.allocateDirect( SIZE );
099            bbw.clear();
100            int count = 0;
101            try {
102                count = fc.read( bbw ); 
103                //System.out.println("count = " + count);
104                if ( count >= SIZE ) { // should not happen
105                    System.out.println("need a loop");
106                }
107                fc.close();
108            } catch(IOException e) {
109                e.printStackTrace();
110                return;
111            }
112            bbw.flip();
113    
114            ObjectBuffer ob = new ObjectBuffer( bbw );
115            System.out.println("ob = " + ob );
116            Object tmp = null;
117            try {
118                tmp = ob.get();
119                System.out.println("tmp = " + tmp);
120    
121                tmp = ob.get();
122                System.out.println("tmp = " + tmp);
123    
124                tmp = ob.get();
125                System.out.println("tmp = " + tmp);
126            } catch(IOException e) {
127                e.printStackTrace();
128                return;
129            } catch(ClassNotFoundException e) {
130                e.printStackTrace();
131                return;
132            }
133            System.out.println("ob = " + ob );
134    
135            System.out.println("***------------------");
136        }
137    
138    }