KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > net > sf > jasperreports > engine > util > JRConcurrentSwapFile


1 /*
2  * ============================================================================
3  * GNU Lesser General Public License
4  * ============================================================================
5  *
6  * JasperReports - Free Java report-generating library.
7  * Copyright (C) 2001-2006 JasperSoft Corporation http://www.jaspersoft.com
8  *
9  * This library is free software; you can redistribute it and/or
10  * modify it under the terms of the GNU Lesser General Public
11  * License as published by the Free Software Foundation; either
12  * version 2.1 of the License, or (at your option) any later version.
13  *
14  * This library is distributed in the hope that it will be useful,
15  * but WITHOUT ANY WARRANTY; without even the implied warranty of
16  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
17  * Lesser General Public License for more details.
18  *
19  * You should have received a copy of the GNU Lesser General Public
20  * License along with this library; if not, write to the Free Software
21  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
22  *
23  * JasperSoft Corporation
24  * 303 Second Street, Suite 450 North
25  * San Francisco, CA 94107
26  * http://www.jaspersoft.com
27  */

28 package net.sf.jasperreports.engine.util;
29
30 import java.io.IOException JavaDoc;
31 import java.nio.ByteBuffer JavaDoc;
32 import java.nio.channels.FileChannel JavaDoc;
33
34 import net.sf.jasperreports.engine.JRRuntimeException;
35
36
37 /**
38  * {@link net.sf.jasperreports.engine.util.JRSwapFile JRSwapFile} derived class that uses
39  * a {@link java.nio.channels.FileChannel FileChannel} to perform concurrent I/O on the
40  * swap file.
41  *
42  * @author Lucian Chirita (lucianc@users.sourceforge.net)
43  * @version $Id: JRConcurrentSwapFile.java 1270 2006-05-29 20:13:26 +0300 (Mon, 29 May 2006) lucianc $
44  */

45 public class JRConcurrentSwapFile extends JRSwapFile
46 {
47     
48     private final FileChannel JavaDoc fileChannel;
49
50     /**
51      * Creates a swap file.
52      *
53      * The file name is generated automatically.
54      *
55      * @param directory the directory where the file should be created.
56      * @param blockSize the size of the blocks allocated by the swap file
57      * @param minGrowCount the minimum number of blocks by which the swap file grows when full
58      */

59     public JRConcurrentSwapFile(String JavaDoc directory, int blockSize, int minGrowCount)
60     {
61         super(directory, blockSize, minGrowCount);
62
63         fileChannel = file.getChannel();
64     }
65
66     protected void write(byte[] data, int dataSize, int dataOffset, long fileOffset) throws IOException JavaDoc
67     {
68         fileChannel.write(ByteBuffer.wrap(data, dataOffset, dataSize), fileOffset);
69     }
70
71     protected void read(byte[] data, int dataOffset, int dataLength, long fileOffset) throws IOException JavaDoc
72     {
73         ByteBuffer JavaDoc buffer = ByteBuffer.wrap(data, dataOffset, dataLength);
74         int read, totalRead = 0;
75         do
76         {
77             read = fileChannel.read(buffer, fileOffset + totalRead);
78             if (read < 0)
79             {
80                 throw new JRRuntimeException("Unable to read sufficient data from the swap file");
81             }
82             totalRead += read;
83         }
84         while (totalRead < dataLength);
85     }
86     
87 }
88
Popular Tags