如何在短缓冲区中读/写?
我正在尝试为短值实现BufferedReader和Writer。每次都会传递一个短[],并且会读短[]。
但是java API没有这个接口,只有byte []。
实现此功能的最佳方法是什么?
答案 0 :(得分:1)
您可以使用长度为2的ByteBuffer读取/写入字节并将两组转换为短路:
ByteBuffer put() to put the bytes into or putShort() when going the other way.
ByteBuffer.getShort() to convert back into shorts.
答案 1 :(得分:1)
那么,对于你的BufferedInputStream(不是读者),你可以尝试同时读取2个字节:
public synchronized int read(short[] s, int off, int len) throws IOException {
byte[] b = new byte[s.length * 2];
int read = read(b, off * 2, len * 2);
for (int i = 0; i < read; i+=2) {
int b1 = b[i];
int b2 = b[i+1];
s[i/2] = (short) ((b1 << 8) | b2);
}
return read / 2;
}
对于BufferedOutputStream(非编写器),您可以尝试相反的操作来同时写入2个字节。
答案 2 :(得分:0)
您可以实现Reader interface,然后扩展writer class以实现除short []之外的编写器。
答案 3 :(得分:0)
只需将一个DataOutputStream包装在BufferedOutputStream周围,并实现一个方法writeShortArray(short []),它在数组参数上迭代地调用writeShort()。同样适用于输入。