Проблема с BinaryReader. ReadChars ()

Я определенно рекомендую Weka, который является Open Source Data Mining Software записан в Java:

Weka является набором алгоритмов машинного обучения для задач анализа данных. Алгоритмы можно или применить непосредственно к набору данных или назвать от Вашего собственного кода Java. Weka содержит инструменты для предварительной обработки данных, классификации, регрессии, кластеризации, правил ассоциации и визуализации. Это является также подходящим для разработки новых схем машинного обучения.

, Как упомянуто выше, это поставлется с набором различных классификаторов как SVM, Веялка , C4.5, Наивный Байесов (конечно), и намного больше (см. документ API). Обратите внимание, что много классификаторов, как известно, имеет намного лучшая производительность, чем Наивный Байесов в области обнаружения спама или классификации текстов.

, Кроме того, Weka приносит Вам очень мощный GUI †¦

7
задан John Saunders 26 January 2014 в 22:05
поделиться

3 ответа

Я воспроизвел проблему, о которой вы упомянули, с помощью BinaryReader.ReadChars .

Хотя разработчику всегда необходимо учитывать опережающий просмотр при составлении таких вещей, как потоки и декодеры, это кажется как довольно серьезная ошибка в BinaryReader , потому что этот класс предназначен для чтения структур данных, состоящих из различных типов данных. В этом случае я согласен с тем, что ReadChars должен был быть более консервативным в том, что он читал, чтобы избежать потери этого байта.

Нет ничего плохого в вашем обходном пути использования Decoder напрямую , в конце концов, это то, что делает ReadChars за кулисами.

Unicode - простой случай. Если вы думаете о произвольной кодировке, действительно нет универсального способа гарантировать, что правильное количество байтов потребляется, когда вы передаете счетчик символов вместо счетчика байтов (подумайте о символах различной длины и случаях, связанных с искаженным вводом). По этой причине отказ от BinaryReader.ReadChars в пользу чтения определенного количества байтов обеспечивает более надежное и общее решение.

Я бы посоветовал вам довести это до сведения Microsoft через http: //connect.microsoft.com/visualstudio[1110264 visible.

3
ответ дан 7 December 2019 в 12:21
поделиться

Интересно; вы можете сообщить об этом на "подключиться". В качестве временной меры вы также можете попробовать обернуть с помощью BufferredStream , но я полагаю, что это скрывает трещину (это все еще может происходить, но реже).

Другой подход, конечно же, заключается в предварительной буферизации всего сообщения (но не всего потока); затем прочтите что-то вроде MemoryStream - если ваш сетевой протокол имеет логических (и в идеале с префиксом длины и не слишком большого размера) сообщений. Затем, когда он декодирует , все данные доступны.

1
ответ дан 7 December 2019 в 12:21
поделиться

Это напоминает один из моих собственных вопросов ( Сбой при чтении из HttpResponseStream ), где у меня возникла проблема с тем, что при чтении из потока ответов HTTP StreamReader мог бы подумать, что он преждевременно достиг конца потока, поэтому мои парсеры неожиданно взорвались.

Как и предложил Марк для вашей проблемы, я сначала попробовал предварительную буферизацию в MemoryStream , который работает хорошо, но означает, что вы возможно, придется долго ждать, если у вас есть большой файл для чтения (особенно из сети / Интернета), прежде чем вы сможете сделать с ним что-нибудь полезное. В конце концов я решил создать собственное расширение TextReader, которое переопределяет методы Read и определяет их с помощью метода ReadBlock (который выполняет блокирующее чтение, т.е. Тип: System .. ::. Int32
Количество символов, прочитанных в буфер. Это может быть меньше, чем количество запрошенных байтов, если такое количество байтов недоступно, или оно может быть нулевым, если достигнут конец потока.

Поскольку BinaryReader не имеет методов ReadBlock, таких как TextReader, все, что вы можете сделать, это взять ваш собственный подход к мониторингу позиции самостоятельно или Марка предварительного кэширования.

1
ответ дан 7 December 2019 в 12:21
поделиться
Другие вопросы по тегам:

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