Java 可以用ByteBuffer重新写入循环缓冲区吗 要使用ByteBuffer重新写入的代码块。问题更新为什么每次调用record()时都要倒带缓冲区?一旦记录数等于大小,你不应该倒带吗?同意。因此,为了在任何时间点调用print时以正确的顺序实现字符串表示,

Java 可以用ByteBuffer重新写入循环缓冲区吗 要使用ByteBuffer重新写入的代码块。问题更新为什么每次调用record()时都要倒带缓冲区?一旦记录数等于大小,你不应该倒带吗?同意。因此,为了在任何时间点调用print时以正确的顺序实现字符串表示,,java,byte,bytebuffer,Java,Byte,Bytebuffer,可以用ByteBuffer重新写入循环缓冲区吗 要使用ByteBuffer重新写入的代码块。问题更新为什么每次调用record()时都要倒带缓冲区?一旦记录数等于大小,你不应该倒带吗?同意。因此,为了在任何时间点调用print时以正确的顺序实现字符串表示,请返回最后100字节。您是否考虑过字符串可以用不同的格式(ASCII、UTF-8等)表示?如果您所担心的只是ASCII,那么它就不应该太复杂,否则您将面临一个更困难的任务。考虑下面的场景——你所记录的第一百字节是代理对的前半部分,这意味着下半部

可以用ByteBuffer重新写入循环缓冲区吗
要使用
ByteBuffer
重新写入的代码块。问题更新为什么每次调用
record()
时都要倒带缓冲区?一旦记录数等于
大小
,你不应该倒带吗?同意。因此,为了在任何时间点调用print时以正确的顺序实现字符串表示,请返回最后100字节。您是否考虑过字符串可以用不同的格式(ASCII、UTF-8等)表示?如果您所担心的只是ASCII,那么它就不应该太复杂,否则您将面临一个更困难的任务。考虑下面的场景——你所记录的第一百字节是代理对的前半部分,这意味着下半部分将被记录为第一字节。现在,在第一个和最后一个索引中有一个垃圾值。我可以问一下为什么
String
类不能满足您的目标吗?可能吧,但为什么?您已经有了工作代码。按设计,
ByteBuffer
不是固有的循环。要使用
ByteBuffer
重新编写代码块。问题更新为什么每次调用
record()
时都要倒带缓冲区?一旦记录数等于
大小
,你不应该倒带吗?同意。因此,为了在任何时间点调用print时以正确的顺序实现字符串表示,请返回最后100字节。您是否考虑过字符串可以用不同的格式(ASCII、UTF-8等)表示?如果您所担心的只是ASCII,那么它就不应该太复杂,否则您将面临一个更困难的任务。考虑下面的场景——你所记录的第一百字节是代理对的前半部分,这意味着下半部分将被记录为第一字节。现在,在第一个和最后一个索引中有一个垃圾值。我可以问一下为什么
String
类不能满足您的目标吗?可能吧,但为什么?您已经有了工作代码。一个
ByteBuffer
在设计上并不是天生的圆形。
byte[] buffer = new byte[100];
int index = 0;

public void recordByte(Byte b) {
   index = (index + 1) % 100;
   buffer[index] = b; 
}

public void printLastBytes() {
   for(int i = index; i < index + 100; i++) {
       System.out.print(buffer[i % 100]);
   }
}
private static final int SIZE = 100;
private final byte[] result = new byte[SIZE];

ByteBuffer buffer = ByteBuffer.allocate(SIZE);


@Override
public void record(byte b) {
    buffer.put(b);

}

@Override
public String print() {

}