Чтение utf8-закодированных данных с соединения, использования Идет

Я могу легко записать строку в соединение с помощью io. WriteString.

Однако я, может казаться, легко не читаю строку из соединения. Единственной вещью, которую я могу считать из соединения, являются байты, которые, кажется, я должен затем так или иначе преобразовать в строку.

Принятие байтов представляет utf8-закодированную строку, как я преобразовал бы их для строкового представления формы?

(Редактирование: альтернативно, как я мог просто считать строку из соединения?)

Спасибо!

0
задан gonewbgo 1 August 2010 в 18:09
поделиться

2 ответа

Вы можете просто преобразовать кусочек байтов в строку:

var foo []byte
var bar string = string(foo)

Кодирование / декодирование не требуется, потому что строки обрабатываются просто как массивы байтов.

2
ответ дан 4 September 2019 в 00:47
поделиться

Удобный инструмент, который подходит для ваших целей, можно найти в стандартной библиотеке: bytes.Buffer ( см. Документацию по пакету ).

Допустим, у вас есть объект, реализующий io.Reader (то есть у него есть метод с подписью Read ([] byte) (int, os.Error) ) .

Типичным примером является os.File :

f, err := os.Open("/etc/passwd", os.O_RDONLY, 0644)

Если вы хотите прочитать содержимое этого файла в виде строки, просто создайте bytes.Buffer (его ноль -value - это готовый к использованию буфер, поэтому вам не нужно вызывать конструктор):

var b bytes.Buffer

Используйте io.Copy , чтобы скопировать содержимое файла в буфер:

n, err := io.Copy(b, f)

(An альтернативой использованию io.Copy будет b.ReadFrom (f) - они более или менее одинаковы.)

И вызовите метод String буфера для получения буфера содержимое в виде строки:

s := b.String()

bytes.Buffer будет автоматически увеличиваться для хранения содержимого файла, поэтому вам не нужно беспокоиться о выделении и увеличении байтовых фрагментов, и Т. Д.

4
ответ дан 4 September 2019 в 00:47
поделиться
Другие вопросы по тегам:

Похожие вопросы: