Shiika/IO
Rust
バッファ(&mut [u8])をとり、実際に読んだバイト数を返す
fn read(&mut self, buf: &mut [u8]) -> Result<usize>;
read_to_end, read_to_stringなどはここ
Readなものにバッファリング機能を足す
行単位の処理(read_line)ができる
これはtrait std::io::BufReadを実装する
BufReadはfill_bufとconsumeを要求する
Go
os.Fileやhttp.Response.BodyがReader
Read(p []byte) (n int, err error) を要求する
これ自体もio.Readerになっている
ReadLineできる
wordcountの例:引数をio.Readerにしておくことで、いろんな入力ソースを扱える
とはいえ、気を抜くと二重にバッファリングすることになるのでは?yhara.icon
この点、RustはBufReadを要求すればバッファリングされていることが確定する
Java
byte単位の他にchar(16bytes)単位がある
InputStream#readがブロックするのが嫌だった
Bufferの概念がある
具体的なIOはChannelクラスの子になる?
Bufferとくっついており、バッファなしの読み出しはできない?
Pathクラスがファイルシステムの種類(→パスセパレータとか)を持ってるの面白いな
C#
Stream (eg. FileStream)はエンコーディングを持たない(バイト単位の操作が前提)