Go有非常好的io.Reader
和io.Writer
接口,大致对应于Java中的java.io.InputStream
和java.io.OutputStream
类(即io.Reader =字节流,io。 Writer =接收字节数。)
我想知道,如果Go还有一些等价的java.io.Reader
(字符流)和java.io.Writer
(字符汇)等级。
我想要的是从/向流读取/写入字符串,而不考虑编码所有时间+支持不同的编码而不仅仅是UTF8(这是io.Reader +字符串类型转换的组合几乎免费提供给我)。
更新:所以我想我的描述令人困惑,我应该避免与Java的比较。我想要的是这样的:
读取器部分,读取下一个128字节,并使用ISO-8859-2字符集解码字节返回Go字符串。
stringReader := NewStringReader(reader, "iso-8859-2") stringReader.read(128)
Writer部分,将stuff转换为UTF16-BE字节,并将其写入writer:
stringWriter := NewStringWriter(writer, "utf16be") stringWriter.write("馞鮂 擙樲橚 褗褆諓");
答案 0 :(得分:3)
我对Java不够熟悉但不会做同样的事情:
// w = io.Writer
io.WriteString("stuff")
// r = io.Reader
sc := bufio.NewScanner(r)
for scanner.Scan() {
fmt.Println(sc.Text())
}
字符串或多或少是readonly []字节。
//修改
阅读完评论后,我认为您正在寻找https://code.google.com/p/go-charset:
r, err := charset.NewReader("latin1", r)
if err != nil {
log.Fatal(err)
}
result, err := ioutil.ReadAll(r)
if err != nil {
log.Fatal(err)
}
fmt.Printf("%s\n", result)