1 33 package smallsql.database; 34 35 import java.io.*; 36 37 41 class MemoryStream { 42 private byte[] puffer; 43 private int offset; 44 45 MemoryStream(){ 46 puffer = new byte[256]; 47 } 48 49 void writeTo(RandomAccessFile file) throws IOException{ 50 file.write(puffer, 0, offset); 51 } 52 53 void writeByte(int value){ 54 verifyFreePufferSize(1); 55 puffer[ offset++ ] = (byte)(value); 56 } 57 58 void writeShort(int value){ 59 verifyFreePufferSize(2); 60 puffer[ offset++ ] = (byte)(value >> 8); 61 puffer[ offset++ ] = (byte)(value); 62 } 63 64 void writeInt(int value){ 65 verifyFreePufferSize(4); 66 puffer[ offset++ ] = (byte)(value >> 24); 67 puffer[ offset++ ] = (byte)(value >> 16); 68 puffer[ offset++ ] = (byte)(value >> 8); 69 puffer[ offset++ ] = (byte)(value); 70 } 71 72 void writeLong(long value){ 73 verifyFreePufferSize(8); 74 puffer[ offset++ ] = (byte)(value >> 56); 75 puffer[ offset++ ] = (byte)(value >> 48); 76 puffer[ offset++ ] = (byte)(value >> 40); 77 puffer[ offset++ ] = (byte)(value >> 32); 78 puffer[ offset++ ] = (byte)(value >> 24); 79 puffer[ offset++ ] = (byte)(value >> 16); 80 puffer[ offset++ ] = (byte)(value >> 8); 81 puffer[ offset++ ] = (byte)(value); 82 } 83 84 void writeChars(char[] value){ 85 verifyFreePufferSize(2*value.length); 86 for(int i=0; i<value.length; i++){ 87 char c = value[i]; 88 puffer[ offset++ ] = (byte)(c >> 8); 89 puffer[ offset++ ] = (byte)(c); 90 } 91 } 92 93 void writeBytes(byte[] value, int off, int length){ 94 verifyFreePufferSize(length); 95 System.arraycopy(value, off, puffer, offset, length); 96 offset += length; 97 } 98 99 private void verifyFreePufferSize(int freeSize){ 100 int minSize = offset+freeSize; 101 if(minSize < puffer.length){ 102 int newSize = puffer.length << 1; 103 if(newSize < minSize) newSize = minSize; 104 byte[] temp = new byte[newSize]; 105 System.arraycopy(puffer, 0, temp, 0, offset); 106 puffer = temp; 107 } 108 } 109 110 111 void skip(int count){ 112 offset += count; 113 } 114 115 116 int readByte(){ 117 return puffer[ offset++ ]; 118 } 119 120 121 int readShort(){ 122 return ((puffer[ offset++ ] & 0xFF) << 8) | (puffer[ offset++ ] & 0xFF); 123 } 124 125 126 int readInt(){ 127 return ((puffer[ offset++ ] & 0xFF) << 24) 128 | ((puffer[ offset++ ] & 0xFF) << 16) 129 | ((puffer[ offset++ ] & 0xFF) << 8) 130 | (puffer[ offset++ ] & 0xFF); 131 } 132 133 134 long readLong(){ 135 return (((long)(puffer[ offset++ ] & 0xFF)) << 56) 136 | (((long)(puffer[ offset++ ] & 0xFF)) << 48) 137 | (((long)(puffer[ offset++ ] & 0xFF)) << 40) 138 | (((long)(puffer[ offset++ ] & 0xFF)) << 32) 139 | ((puffer[ offset++ ] & 0xFF) << 24) 140 | ((puffer[ offset++ ] & 0xFF) << 16) 141 | ((puffer[ offset++ ] & 0xFF) << 8) 142 | (puffer[ offset++ ] & 0xFF); 143 } 144 145 146 char[] readChars(int length){ 147 char[] chars = new char[length]; 148 for(int i=0; i<length; i++){ 149 chars[i] = (char)readShort(); 150 } 151 return chars; 152 } 153 154 byte[] readBytes(int length){ 155 byte[] bytes = new byte[length]; 156 System.arraycopy(puffer, offset, bytes, 0, length); 157 offset += length; 158 return bytes; 159 } 160 } 161 | Popular Tags |