使用 async-std 分块读取
read in chunks with async-std
我正在尝试实现类似于在 Java 中使用 AsynchronousByteChannel 读取文件的功能,例如
AsynchronousFileChannel channel = AsynchronousFileChannel.open(path...
channel.read(buffer,... new CompletionHandler<Integer, ByteBuffer>() {
@Override
public void completed(Integer result) {
...use buffer
}
即尽可能多地阅读 OS 所给予的、处理的、要求更多的等等。
使用 async_std 实现此目的最直接的方法是什么?
您可以使用 async_std::io::Read
特征的 read
方法:
use async_std::prelude::*;
let mut reader = obtain_read_somehow();
let mut buf = [0; 4096]; // or however large you want it
// read returns a Poll<Result> so you have to handle the result
loop {
let byte_count = reader.read(&mut buf).await?;
if byte_count == 0 {
// 0 bytes read means we're done
break;
}
// call whatever handler function on the bytes read
handle(&buf[..byte_count]);
}
我正在尝试实现类似于在 Java 中使用 AsynchronousByteChannel 读取文件的功能,例如
AsynchronousFileChannel channel = AsynchronousFileChannel.open(path...
channel.read(buffer,... new CompletionHandler<Integer, ByteBuffer>() {
@Override
public void completed(Integer result) {
...use buffer
}
即尽可能多地阅读 OS 所给予的、处理的、要求更多的等等。 使用 async_std 实现此目的最直接的方法是什么?
您可以使用 async_std::io::Read
特征的 read
方法:
use async_std::prelude::*;
let mut reader = obtain_read_somehow();
let mut buf = [0; 4096]; // or however large you want it
// read returns a Poll<Result> so you have to handle the result
loop {
let byte_count = reader.read(&mut buf).await?;
if byte_count == 0 {
// 0 bytes read means we're done
break;
}
// call whatever handler function on the bytes read
handle(&buf[..byte_count]);
}