Docjar: A Java Source and Docuemnt Enginecom.*    java.*    javax.*    org.*    all    new    plug-in

Quick Search    Search Deep

Source code: org/hsqldb/DatabaseFile.java


1   /* Copyrights and Licenses
2    *
3    * This product includes Hypersonic SQL.
4    * Originally developed by Thomas Mueller and the Hypersonic SQL Group. 
5    *
6    * Copyright (c) 1995-2000 by the Hypersonic SQL Group. All rights reserved. 
7    * Redistribution and use in source and binary forms, with or without modification, are permitted
8    * provided that the following conditions are met: 
9    *     -  Redistributions of source code must retain the above copyright notice, this list of conditions
10   *         and the following disclaimer. 
11   *     -  Redistributions in binary form must reproduce the above copyright notice, this list of
12   *         conditions and the following disclaimer in the documentation and/or other materials
13   *         provided with the distribution. 
14   *     -  All advertising materials mentioning features or use of this software must display the
15   *        following acknowledgment: "This product includes Hypersonic SQL." 
16   *     -  Products derived from this software may not be called "Hypersonic SQL" nor may
17   *        "Hypersonic SQL" appear in their names without prior written permission of the
18   *         Hypersonic SQL Group. 
19   *     -  Redistributions of any form whatsoever must retain the following acknowledgment: "This
20   *          product includes Hypersonic SQL." 
21   * This software is provided "as is" and any expressed or implied warranties, including, but
22   * not limited to, the implied warranties of merchantability and fitness for a particular purpose are
23   * disclaimed. In no event shall the Hypersonic SQL Group or its contributors be liable for any
24   * direct, indirect, incidental, special, exemplary, or consequential damages (including, but
25   * not limited to, procurement of substitute goods or services; loss of use, data, or profits;
26   * or business interruption). However caused any on any theory of liability, whether in contract,
27   * strict liability, or tort (including negligence or otherwise) arising in any way out of the use of this
28   * software, even if advised of the possibility of such damage. 
29   * This software consists of voluntary contributions made by many individuals on behalf of the
30   * Hypersonic SQL Group.
31   *
32   *
33   * For work added by the HSQL Development Group:
34   *
35   * Copyright (c) 2001-2002, The HSQL Development Group
36   * All rights reserved.
37   *
38   * Redistribution and use in source and binary forms, with or without
39   * modification, are permitted provided that the following conditions are met:
40   *
41   * Redistributions of source code must retain the above copyright notice, this
42   * list of conditions and the following disclaimer, including earlier
43   * license statements (above) and comply with all above license conditions.
44   *
45   * Redistributions in binary form must reproduce the above copyright notice,
46   * this list of conditions and the following disclaimer in the documentation
47   * and/or other materials provided with the distribution, including earlier
48   * license statements (above) and comply with all above license conditions.
49   *
50   * Neither the name of the HSQL Development Group nor the names of its
51   * contributors may be used to endorse or promote products derived from this
52   * software without specific prior written permission.
53   *
54   * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
55   * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
56   * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
57   * ARE DISCLAIMED. IN NO EVENT SHALL HSQL DEVELOPMENT GROUP, HSQLDB.ORG, 
58   * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, 
59   * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 
60   * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
61   * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
62   * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
63   * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
64   * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
65   */
66  
67  
68  package org.hsqldb;
69  
70  import java.io.RandomAccessFile;
71  import java.io.IOException;
72  import java.io.EOFException;
73  import java.io.FileNotFoundException;
74  
75  // fredt@users 20020221 - patch 513005 by sqlbob@users (RMP) - new method
76  
77  /**
78   *  This class provides methods for reading and writing data from a
79   *  database file such as that used for storing a cached table.
80   *
81   * @version  1.7.0
82   */
83  class DatabaseFile extends RandomAccessFile {
84  
85      protected byte in[];
86      protected long pos;
87      protected int  index;
88      protected int  count;
89  
90      DatabaseFile(String name, String mode,
91                   int inSize) throws FileNotFoundException, IOException {
92  
93          super(name, mode);
94  
95          in = new byte[inSize];
96      }
97  
98      protected void realSeek(long newPos) throws IOException {
99          super.seek(newPos);
100     }
101 
102     public void seek(long newPos) throws IOException {
103 
104         super.seek(newPos);
105 
106         pos   = newPos;
107         index = count = 0;
108     }
109 
110     public void readSeek(long newPos) throws IOException {
111 
112         if (in == null) {
113             seek(newPos);
114         } else if (newPos != pos) {
115             index += (int) (newPos - pos);
116 
117             if ((index < 0) || (index > count)) {
118                 seek(newPos);
119             } else {
120                 pos = newPos;
121             }
122         }
123     }
124 
125     public int read() throws IOException {
126 
127         if (in == null) {
128             return (super.read());
129         }
130 
131         if (index == count) {
132             index = 0;
133             count = super.read(in);
134 
135             if (count == -1) {
136                 count = 0;
137             }
138         }
139 
140         if (index == count) {
141             return (-1);
142         }
143 
144         pos++;
145 
146         return (in[index++] & 0xff);
147     }
148 
149     public int read(byte[] b) throws IOException {
150 
151         int i = 0;
152         int next;
153 
154         for (; i < b.length; i++) {
155             next = read();
156 
157             if (next == -1) {
158                 return (-1);
159             }
160 
161             b[i] = (byte) next;
162         }
163 
164         return (i);
165     }
166 
167     //-- readInt is final.
168     public int readInteger() throws IOException {
169 
170         int ret = 0;
171         int next;
172 
173         for (int i = 0; i < 4; i++) {
174             next = read();
175 
176             if (next == -1) {
177                 throw (new EOFException());
178             }
179 
180             ret <<= 8;
181             ret += (next & 0xff);
182         }
183 
184         return (ret);
185     }
186 
187     public void write(byte[] b) throws IOException {
188 
189         index = count = 0;
190         pos   += b.length;
191 
192         super.write(b);
193     }
194 
195     //-- writeInt is final.
196     public void writeInteger(int i) throws IOException {
197 
198         index = count = 0;
199         pos   += 4;
200 
201         writeInt(i);
202     }
203 
204     public void close() throws IOException {
205 
206         super.close();
207 
208         in = null;
209     }
210 }