📄 bytebuffer.java
字号:
package org.garret.perst.impl;
import java.io.*;
import org.garret.perst.StorageError;
public class ByteBuffer {
public final void extend(int size) {
if (size > arr.length) {
int newLen = size > arr.length*2 ? size : arr.length*2;
byte[] newArr = new byte[newLen];
System.arraycopy(arr, 0, newArr, 0, used);
arr = newArr;
}
used = size;
}
final byte[] toArray() {
byte[] result = new byte[used];
System.arraycopy(arr, 0, result, 0, used);
return result;
}
int packString(int dst, String value, String encoding) {
if (value == null) {
extend(dst + 4);
Bytes.pack4(arr, dst, -1);
dst += 4;
} else {
int length = value.length();
if (encoding == null) {
extend(dst + 4 + 2*length);
Bytes.pack4(arr, dst, length);
dst += 4;
for (int i = 0; i < length; i++) {
Bytes.pack2(arr, dst, (short)value.charAt(i));
dst += 2;
}
} else {
try {
byte[] bytes = value.getBytes(encoding);
extend(dst + 4 + bytes.length);
Bytes.pack4(arr, dst, -2-bytes.length);
System.arraycopy(bytes, 0, arr, dst+4, bytes.length);
dst += 4 + bytes.length;
} catch (UnsupportedEncodingException x) {
throw new StorageError(StorageError.UNSUPPORTED_ENCODING);
}
}
}
return dst;
}
class ByteBufferOutputStream extends OutputStream {
public void write(int b) {
write(new byte[]{(byte)b}, 0, 1);
}
public void write(byte b[], int off, int len) {
int pos = used;
extend(pos + len);
System.arraycopy(b, off, arr, pos, len);
}
}
public OutputStream getOutputStream() {
return new ByteBufferOutputStream();
}
public int size() {
return used;
}
ByteBuffer() {
arr = new byte[64];
}
public byte[] arr;
public int used;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -