TempBuffer.java revision 3261:a06412e13bf7
1/*
2 * Copyright (c) 2002, 2010, Oracle and/or its affiliates. All rights reserved.
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4 *
5 * This code is free software; you can redistribute it and/or modify it
6 * under the terms of the GNU General Public License version 2 only, as
7 * published by the Free Software Foundation.
8 *
9 * This code is distributed in the hope that it will be useful, but WITHOUT
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
12 * version 2 for more details (a copy is included in the LICENSE file that
13 * accompanied this code).
14 *
15 * You should have received a copy of the GNU General Public License version
16 * 2 along with this work; if not, write to the Free Software Foundation,
17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
18 *
19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
20 * or visit www.oracle.com if you need additional information or have any
21 * questions.
22 */
23
24/* @test
25 * @bug 4738257 4853295
26 * @summary Test Util.getTemporaryBuffer
27 */
28
29import java.io.*;
30import java.nio.channels.*;
31import java.nio.*;
32
33public class TempBuffer {
34
35    private static final int SIZE = 4000;
36
37    private static final int ITERATIONS = 10;
38
39    public static void main(String[] args) throws Exception {
40        for (int i=0; i<ITERATIONS; i++)
41            testTempBufs();
42    }
43
44    private static void testTempBufs() throws Exception {
45        Pipe pipe = Pipe.open();
46        Pipe.SourceChannel sourceChannel = pipe.source();
47        final Pipe.SinkChannel sinkChannel = pipe.sink();
48
49        Thread writerThread = new Thread() {
50            public void run() {
51                try {
52                    OutputStream out = Channels.newOutputStream(sinkChannel);
53                    File blah = File.createTempFile("blah1", null);
54                    blah.deleteOnExit();
55                    TempBuffer.initTestFile(blah);
56                    RandomAccessFile raf = new RandomAccessFile(blah, "rw");
57                    FileChannel fc = raf.getChannel();
58                    try {
59                        fc.transferTo(0, SIZE, Channels.newChannel(out));
60                    } finally {
61                        fc.close();
62                    }
63                    out.flush();
64                } catch (IOException ioe) {
65                    throw new RuntimeException(ioe);
66                }
67            }
68        };
69
70        writerThread.start();
71
72        InputStream in = Channels.newInputStream(sourceChannel);
73        File blah = File.createTempFile("blah2", null);
74        blah.deleteOnExit();
75        RandomAccessFile raf = new RandomAccessFile(blah, "rw");
76        FileChannel fc = raf.getChannel();
77        try {
78            raf.setLength(SIZE);
79            fc.transferFrom(Channels.newChannel(in), 0, SIZE);
80        } finally {
81            fc.close();
82        }
83
84        sourceChannel.close();
85        sinkChannel.close();
86        blah.delete();
87    }
88
89    private static void initTestFile(File blah) throws IOException {
90        FileOutputStream fos = new FileOutputStream(blah);
91        BufferedWriter awriter
92            = new BufferedWriter(new OutputStreamWriter(fos, "8859_1"));
93
94        for(int i=0; i<4000; i++) {
95            String number = new Integer(i).toString();
96            for (int h=0; h<4-number.length(); h++)
97                awriter.write("0");
98            awriter.write(""+i);
99            awriter.newLine();
100        }
101       awriter.flush();
102       awriter.close();
103    }
104}
105