1 /***
2 *
3 * Copyright 2004 Hiram Chrino
4 *
5 * Licensed under the Apache License, Version 2.0 (the "License");
6 * you may not use this file except in compliance with the License.
7 * You may obtain a copy of the License at
8 *
9 * http://www.apache.org/licenses/LICENSE-2.0
10 *
11 * Unless required by applicable law or agreed to in writing, software
12 * distributed under the License is distributed on an "AS IS" BASIS,
13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 * See the License for the specific language governing permissions and
15 * limitations under the License.
16 */
17 package org.activeio;
18
19 import java.io.DataOutput;
20 import java.io.IOException;
21 import java.io.OutputStream;
22
23 /***
24 * Provides a ByteBuffer like interface to work with IO channel packets of data.
25 *
26 * @version $Revision$
27 */
28 public interface Packet extends Disposable {
29
30 public static class ByteSequence {
31 private final byte[] data;
32 private final int offset;
33 private final int length;
34
35 public ByteSequence(byte data[], int offset, int length) {
36 this.data = data;
37 this.offset = offset;
38 this.length = length;
39 }
40 public byte[] getData() {
41 return data;
42 }
43 public int getLength() {
44 return length;
45 }
46 public int getOffset() {
47 return offset;
48 }
49
50 }
51
52 public int position();
53 public void position(int position);
54 public int limit();
55 public void limit(int limit);
56 public void flip();
57 public int remaining();
58 public void rewind();
59 public boolean hasRemaining();
60 public void clear();
61 public Packet slice();
62 public Packet duplicate();
63 public Object duplicate(ClassLoader cl) throws IOException;
64 public int capacity();
65
66 public ByteSequence asByteSequence();
67 public byte[] sliceAsBytes();
68
69
70 /***
71 * Writes the remaing bytes in the packet to the output stream.
72 *
73 * @param out
74 * @return
75 */
76 void writeTo(OutputStream out) throws IOException;
77 void writeTo(DataOutput out) throws IOException;
78
79
80 public int read();
81 public int read(byte data[], int offset, int length);
82
83
84 public boolean write( int data );
85 public int write( byte data[], int offset, int length );
86 public int read(Packet dest);
87
88 /***
89 * Used to get a richer metadata interface to the packet.
90 */
91 Object narrow(Class target);
92
93 }