Mercurial Hosting > luan
comparison src/org/eclipse/jetty/io/nio/RandomAccessFileBuffer.java @ 802:3428c60d7cfc
replace jetty jars with source
author | Franklin Schmidt <fschmidt@gmail.com> |
---|---|
date | Wed, 07 Sep 2016 21:15:48 -0600 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
801:6a21393191c1 | 802:3428c60d7cfc |
---|---|
1 // | |
2 // ======================================================================== | |
3 // Copyright (c) 1995-2014 Mort Bay Consulting Pty. Ltd. | |
4 // ------------------------------------------------------------------------ | |
5 // All rights reserved. This program and the accompanying materials | |
6 // are made available under the terms of the Eclipse Public License v1.0 | |
7 // and Apache License v2.0 which accompanies this distribution. | |
8 // | |
9 // The Eclipse Public License is available at | |
10 // http://www.eclipse.org/legal/epl-v10.html | |
11 // | |
12 // The Apache License v2.0 is available at | |
13 // http://www.opensource.org/licenses/apache2.0.php | |
14 // | |
15 // You may elect to redistribute this code under either of these licenses. | |
16 // ======================================================================== | |
17 // | |
18 | |
19 package org.eclipse.jetty.io.nio; | |
20 | |
21 import java.io.File; | |
22 import java.io.FileNotFoundException; | |
23 import java.io.IOException; | |
24 import java.io.RandomAccessFile; | |
25 import java.nio.channels.FileChannel; | |
26 import java.nio.channels.WritableByteChannel; | |
27 | |
28 import org.eclipse.jetty.io.AbstractBuffer; | |
29 import org.eclipse.jetty.io.Buffer; | |
30 | |
31 public class RandomAccessFileBuffer extends AbstractBuffer implements Buffer | |
32 { | |
33 final RandomAccessFile _file; | |
34 final FileChannel _channel; | |
35 final int _capacity; | |
36 | |
37 public RandomAccessFileBuffer(File file) | |
38 throws FileNotFoundException | |
39 { | |
40 super(READWRITE,true); | |
41 assert file.length()<=Integer.MAX_VALUE; | |
42 _file = new RandomAccessFile(file,"rw"); | |
43 _channel=_file.getChannel(); | |
44 _capacity=Integer.MAX_VALUE; | |
45 setGetIndex(0); | |
46 setPutIndex((int)file.length()); | |
47 } | |
48 | |
49 public RandomAccessFileBuffer(File file,int capacity) | |
50 throws FileNotFoundException | |
51 { | |
52 super(READWRITE,true); | |
53 assert capacity>=file.length(); | |
54 assert file.length()<=Integer.MAX_VALUE; | |
55 _capacity=capacity; | |
56 _file = new RandomAccessFile(file,"rw"); | |
57 _channel=_file.getChannel(); | |
58 setGetIndex(0); | |
59 setPutIndex((int)file.length()); | |
60 } | |
61 | |
62 public RandomAccessFileBuffer(File file,int capacity,int access) | |
63 throws FileNotFoundException | |
64 { | |
65 super(access,true); | |
66 assert capacity>=file.length(); | |
67 assert file.length()<=Integer.MAX_VALUE; | |
68 _capacity=capacity; | |
69 _file = new RandomAccessFile(file,access==READWRITE?"rw":"r"); | |
70 _channel=_file.getChannel(); | |
71 setGetIndex(0); | |
72 setPutIndex((int)file.length()); | |
73 } | |
74 | |
75 public byte[] array() | |
76 { | |
77 return null; | |
78 } | |
79 | |
80 public int capacity() | |
81 { | |
82 return _capacity; | |
83 } | |
84 | |
85 @Override | |
86 public void clear() | |
87 { | |
88 try | |
89 { | |
90 synchronized (_file) | |
91 { | |
92 super.clear(); | |
93 _file.setLength(0); | |
94 } | |
95 } | |
96 catch(Exception e) | |
97 { | |
98 throw new RuntimeException(e); | |
99 } | |
100 } | |
101 | |
102 | |
103 @Override | |
104 public byte peek() | |
105 { | |
106 synchronized (_file) | |
107 { | |
108 try | |
109 { | |
110 if (_get!=_file.getFilePointer()) | |
111 _file.seek(_get); | |
112 return _file.readByte(); | |
113 } | |
114 catch(Exception e) | |
115 { | |
116 throw new RuntimeException(e); | |
117 } | |
118 } | |
119 } | |
120 | |
121 public byte peek(int index) | |
122 { | |
123 synchronized (_file) | |
124 { | |
125 try | |
126 { | |
127 _file.seek(index); | |
128 return _file.readByte(); | |
129 } | |
130 catch(Exception e) | |
131 { | |
132 throw new RuntimeException(e); | |
133 } | |
134 } | |
135 } | |
136 | |
137 public int peek(int index, byte[] b, int offset, int length) | |
138 { | |
139 synchronized (_file) | |
140 { | |
141 try | |
142 { | |
143 _file.seek(index); | |
144 return _file.read(b,offset,length); | |
145 } | |
146 catch(Exception e) | |
147 { | |
148 throw new RuntimeException(e); | |
149 } | |
150 } | |
151 } | |
152 | |
153 public void poke(int index, byte b) | |
154 { | |
155 synchronized (_file) | |
156 { | |
157 try | |
158 { | |
159 _file.seek(index); | |
160 _file.writeByte(b); | |
161 } | |
162 catch(Exception e) | |
163 { | |
164 throw new RuntimeException(e); | |
165 } | |
166 } | |
167 } | |
168 | |
169 @Override | |
170 public int poke(int index, byte[] b, int offset, int length) | |
171 { | |
172 synchronized (_file) | |
173 { | |
174 try | |
175 { | |
176 _file.seek(index); | |
177 _file.write(b,offset,length); | |
178 return length; | |
179 } | |
180 catch(Exception e) | |
181 { | |
182 throw new RuntimeException(e); | |
183 } | |
184 } | |
185 } | |
186 | |
187 public int writeTo(WritableByteChannel channel,int index, int length) | |
188 throws IOException | |
189 { | |
190 synchronized (_file) | |
191 { | |
192 return (int)_channel.transferTo(index,length,channel); | |
193 } | |
194 } | |
195 | |
196 } |