Go中有java.io.Reader等价吗?

时间:2014-09-03 18:44:50

标签: go

Go有非常好的io.Readerio.Writer接口,大致对应于Java中的java.io.InputStreamjava.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("馞鮂 擙樲橚 褗褆諓");

1 个答案:

答案 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)