![]() |
|
Модераторы: Partizan, gambit |
![]()
|
|
| Competitor |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 440 Регистрация: 23.3.2005 Где: Tula Репутация: -1 Всего: -1 |
Привет Всем!
Сериализую объект класса в массив байт:
Но после сериализации в буфере скорее всего будет занято куда меньше места, чем я для него выделил. Нехорошо. Плюс не исключена (хотя и маловероятна) ситуация когда 4096 байт не хватит для того, чтобы разместить в таком массиве сложный объект. Вопрос: есть ли способ не задавать явно размер буфера? |
|||
|
||||
| HalkaR |
|
|||
![]() Пуфыстый назгул ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2132 Регистрация: 8.12.2002 Где: В Москве Репутация: 14 Всего: 42 |
Competitor, естественно если размер обьекта меньще 4K то будет занято меньше.
Если же будет больше, то будет увеличен размер буфера еще на 4К. Такая уж система увеличения буфера по 4К. |
|||
|
||||
| Competitor |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 440 Регистрация: 23.3.2005 Где: Tula Репутация: -1 Всего: -1 |
HalkaR, ok, перефразирую.
Как решить задачу сериализации объекта в массив байт, чтобы на выходе получился массив именно того размера, который требуется для данного объекта? Очевидно, что в приведенном мной примере условие этой задачи не выполняются по уже описанным выше причинам. |
|||
|
||||
| Azzdorf |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 190 Регистрация: 29.3.2007 Репутация: нет Всего: нет |
а ты не пробовал просто проводить сериализацию без выделения памяти, Сшарп сам выделит сколько будет нужно
--------------------
Иногда шаг вперед - это результат хорошего пинка под зад. |
|||
|
||||
| Competitor |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 440 Регистрация: 23.3.2005 Где: Tula Репутация: -1 Всего: -1 |
Azzdorf, конечно пробовал. Выдает ошибку: buffer не может быть нулевым.
|
|||
|
||||
| tol05 |
|
||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1632 Регистрация: 21.12.2006 Где: Харьков Репутация: 63 Всего: 170 |
я так понимаю, тебе при серилизации массив конкретного размера не нужен?
Это не из той темы, что мы когда-то обсуждали? -------------------- На хорошей работе и сны хорошие снятся. |
||||
|
|||||
| Competitor |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 440 Регистрация: 23.3.2005 Где: Tula Репутация: -1 Всего: -1 |
пять баллов, tol05
ЗЫ: Когда же я наконец научусь сам пользовать гуглем и мсдном :( |
|||
|
||||
| Competitor |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 440 Регистрация: 23.3.2005 Где: Tula Репутация: -1 Всего: -1 |
А как обыграть ситуацию, когда идет чтение из NetworkStream? Т.е. смысл тот же, после чтения из потока получить массив точно такого же размера, который необходим:
Здесь мы вынуждены предварительно определить размер массива, хотя занято в итоге будет меньше байт. Как после чтения данных через сокет получить массив размера readBytes? |
|||
|
||||
| tol05 |
|
||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1632 Регистрация: 21.12.2006 Где: Харьков Репутация: 63 Всего: 170 |
Э, тут никак, по-моему. Для сетевых потоков (и для MemoryStream) нельзя узнать кол-во данных, пока не прочтешь. Сделано это для уменьшения траффика типа тут только так: задаешь массив конкретного размера, читаешь в него, пересохраняешь куда-нибудь данные, читаешь снова и так, пока не закончатся данные для чтения. Смотришь перед каждым чтением свойство this.networkStream.DataAvailable когда данных не будет, берешь последнее значение своего readBytes и
P.S. Можно сохранять все полученные данные опять же в MemoryStream, а потом из него получить массив всех полученных данных Это сообщение отредактировал(а) tol05 - 8.6.2007, 18:42 -------------------- На хорошей работе и сны хорошие снятся. |
||||
|
|||||
![]()
|
| Прежде чем создать тему, посмотрите сюда: | |
|
|
Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов. Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :) Так же не забывайте отмечать свой вопрос решенным, если он таковым является :) Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |