我在下面用restlet-android-2.1.4写了一个ServerResource。如果我将SIZE设置为1024 * 12 + 485,则可以正常工作。但是,如果我将SIZE更改为1024 * 12 + 486,则此句柄将处于待处理状态。
public class DataResource extends ServerResource {
public static final int SIZE = 1024 * 12 + 485;
@Get
public Representation getResource(Representation entity) {
return new OutputRepresentation(MediaType.ALL) {
@Override
public void write(OutputStream outputStream) throws IOException {
StringBuilder sb = new StringBuilder();
for (int i = 0; i < SIZE; i++) {
sb.append('E');
}
outputStream.write(sb.toString().getBytes());
outputStream.close();
}
};
}
}
答案 0 :(得分:0)
深入了解代码,更改WritableSocketChannel.java中的write函数(在restlet源代码中),它将起作用。 我不知道这是不是一个错误。
来自
public int write(ByteBuffer src) throws IOException {
return getWrappedChannel().write(src);
}
到
public int write(ByteBuffer src) throws IOException {
int count = 0;
while (src.hasRemaining()) {
count += getWrappedChannel().write(src);
}
return count;
}
根据java doc。
某些类型的频道,根据其状态,可能只能写入 一些字节或可能根本没有。一个套接字通道 例如,非阻塞模式不能写任何更多的字节 在套接字的输出缓冲区中释放。