Re: Переввести в 16-ричный вид | |
---|---|
SoccerStudio Сообщений: 5055 Откуда: Подмосковье Дата регистрации: 28.11.2006 |
Меня когда-то за подобный код имели конкретно. Так сказать, прививали уважение к обязательному использованию using применительно к IDisposable.
------------------ "Здесь я, братцы, сдержу матерщину, и скажу только "... мать!"" (с) Шаов |
Re: Переввести в 16-ричный вид | |
---|---|
S-type Автор Сообщений: 2969 Дата регистрации: 24.04.2004 |
За счёт чего уменьшится быстродействие? Read медленней ReadBytes? В случае Read буфер выделяется явно, потом он заполняется из потока. А в случае с ReadBytes буфер выделяется и заполняется внутри ReadBytes. Чисто визуально, ReadBytes должен работать быстрее. |
Re: Переввести в 16-ричный вид | |
---|---|
S-type Автор Сообщений: 2969 Дата регистрации: 24.04.2004 |
Вот реальный код, который сейчас в программе:
Вот предыдущая версия:
Пожалуйста, критикуйте. |
Re: Переввести в 16-ричный вид | |
---|---|
Igor Korolyov Сообщений: 34580 Дата регистрации: 28.05.2002 |
Вероятно за счёт "динамического" выделения памяти под массив при использовании ReadBytes... Сложно сказать не заглядывая в исходник этих методов
Но я повторюсь - для задач "конвертации" более выгодно будет конвертировать пачками/блоками, а не читая ВЕСЬ файл в память. По 2-му коду - ну дык BinaryReader тоже IDisposable - а в случае возникновения ошибки твой .Close() так и не сработает - потому и нужен using - ну или его "самописный" аналог на основе try ... finally ... Опять же код с (int)streamReader.BaseStream.Length априори "нехороший" код - он урезает всё до размеров <= 2Гб. Т.е. подсовываешь твоему конвертеру iso-ник на 3-5Гб и получаешь непредсказуемый/некорректный результат... Это уже чисто "логическая" проблема кода. ------------------ WBR, Igor |
Re: Переввести в 16-ричный вид | |
---|---|
S-type Автор Сообщений: 2969 Дата регистрации: 24.04.2004 |
Понял, исправлю!
Т.е. txtFile1.BaseStream.Length перед приведением в int надо проверить на размерность? Или, просто в try обернуть? |
Re: Переввести в 16-ричный вид | |
---|---|
ssa Сообщений: 12999 Откуда: Москва Дата регистрации: 23.03.2005 |
Ужос... Приведение к int это делает. Не влезает в него 3-5Гб. ------------------ Лень - это неосознанная мудрость. |
Re: Переввести в 16-ричный вид | |
---|---|
Igor Korolyov Сообщений: 34580 Дата регистрации: 28.05.2002 |
Нет, просто переписать код для работы блоками разумного размера (что позволит при желании и террабайтные файлы hex-ифицировать). Ну или в начале кода поставить "стопор" - ежели вышло что подсунули файл больше 2Гб, то вылет с программной ошибкой "такой хоккей нам не нужен" Есть и более плохой вариант - написать в мануале мелким шрифтом что работа с файлами >2Гб не предусмотрена, и если что то тыкать возмущённому юзеру на этот пункт Так сказать организационно решить программную проблему (но это плохо - так же плохо как и программно решать организационные проблемы). P.S. Наверное тебя вообще порвёт в тряпки метод File.ReadAllBytes() из System.IO Хотя исходя из вышеизложенного я бы его не советовал применять - ну разве что заказчик клятвенно гарантирует что все обрабатываемые файлики будут мелкими, а памяти на машине будет вагон. ------------------ WBR, Igor |
Re: Переввести в 16-ричный вид | |
---|---|
S-type Автор Сообщений: 2969 Дата регистрации: 24.04.2004 |
Лично для меня ужас в другом - зачем что бы просто прочитать данные из файла надо использовать StreamReader + BinaryReader? Почему BinaryReader не имеет конструктора с параметром string fileName? Опять таки, почему свойство Length есть у Stream, но его нет у BinaryReader (и приходится выкорябывать его из streamReader.BaseStream.Length)?
|
Re: Переввести в 16-ричный вид | |
---|---|
S-type Автор Сообщений: 2969 Дата регистрации: 24.04.2004 |
Ага!
Пошёл править программу... |
Re: Переввести в 16-ричный вид | |
---|---|
Igor Korolyov Сообщений: 34580 Дата регистрации: 28.05.2002 |
Ну потому что у них разные задачи. Вот файл... А если это не файл, а сетевой поток данных? Или файл, но внутри архива? Или просто область в памяти?
Ты еще про FileStream забыл Разделение функций, однако Один читает именно файл в ФС, а другой трактует прочитанное (из любого "источника", не только файла) как "байтики". Делать один класс мега-монстр который и файлы, и память, и сокеты, и http-потоки, и изнутри архивов... И заодно трактует прочитанное как байтики, и как строки, и как "форматированные структуры данных"... В общем это совершенно точно неправильный подход. ------------------ WBR, Igor |
Re: Переввести в 16-ричный вид | |
---|---|
S-type Автор Сообщений: 2969 Дата регистрации: 24.04.2004 |
IMHO, какое то кособокое... [тихо ворчу] |
Re: Переввести в 16-ричный вид | |
---|---|
Рома Сообщений: 1079 Дата регистрации: 06.06.2001 |
Не проще ли
|
Re: Переввести в 16-ричный вид | |
---|---|
S-type Автор Сообщений: 2969 Дата регистрации: 24.04.2004 |
Спасибо, Igor Korolyov уже подсказал |
© 2000-2024 Fox Club  |