我有一个使用 InputStreams 的现有问题,我想提高从该通道读取的性能。因此我用ReadableByteChannel
.
因此,使用此代码读取速度要快得多:
public static String readAll(InputStream is, String charset, int size) throws IOException{
try(ByteArrayOutputStream bos = new ByteArrayOutputStream()){
java.nio.ByteBuffer buffer = java.nio.ByteBuffer.allocate(size);
try(ReadableByteChannel channel = Channels.newChannel(is)){
int bytesRead = 0;
do{
bytesRead = channel.read(buffer);
bos.write(buffer.array(), 0, bytesRead);
buffer.clear();
}
while(bytesRead >= size);
}
catch(Exception ex){
ex.printStackTrace();
}
String ans = bos.toString(charset);
return ans;
}
}
问题是:每次都读不完!如果我尝试读取文件,它的效果非常好。如果我从网络套接字读取(例如手动请求网页),它有时会在两者之间停止。
我该怎么做才能读到最后?
我不想使用这样的东西:
StringBuilder result = new StringBuilder();
while(true){
int ans = is.read();
if(ans == -1) break;
result.append((char)ans);
}
return result.toString();
因为这个实现很慢。
我希望你能帮助我解决我的问题。也许我的代码中有一些错误。