Вход | Регистрация
 
1С:Предприятие :: 1С:Предприятие 8 общая

Запись текста в ПотокВПамяти

Запись текста в ПотокВПамяти
Я
   Oldman06
 
30.09.20 - 11:59
Приветствую. Пытаюсь избавиться от использования временных файлов.
С временным файлом:

ВременныйФайл = ПолучитьИмяВременногоФайла();
Запись = Новый ЗаписьТекста(ВременныйФайл, "UTF-8");
Запись.Записать("" + Настройки.ИдентификаторКлиента + ":" + Настройки.СекретнаяСтрока);
Запись.Закрыть();
ДД = Новый ДвоичныеДанные(ВременныйФайл);

получаю одни двоичные данные (правильные).
С потоком в памяти:

ПотокДанных = Новый ПотокВПамяти();
ЗаписьТекста = Новый ЗаписьТекста(ПотокДанных, "UTF-8");
ЗаписьТекста.Записать("" + Настройки.ИдентификаторКлиента + ":" + Настройки.СекретнаяСтрока);
ЗаписьТекста.Закрыть();
ДД = ПотокДанных.ЗакрытьИПолучитьДвоичныеДанные();

получаю совершенно другие двоичные данные, да еще и короче на 3 байта.
Я что-то не знаю о потоках в 1С? Никогда с ними не работал до этого.
   Franchiser
 
1 - 30.09.20 - 12:00
(0) а почему они должны совпадать?
   Oldman06
 
2 - 30.09.20 - 12:02
(1) А почему нет?

Посмотрел внимательней. В двоичных данных полученных через поток отсутствуют первые 3 баата (EF BB BF)
   Oldman06
 
3 - 30.09.20 - 12:03
В остальном двоичные данные совпадают.
   Franchiser
 
4 - 30.09.20 - 12:04
Обычно в файлах если смотреть hex пишется в начало некая информация о формате - подпись : txt, jpg и т.д.
А поток может это не писать.
   mikecool
 
5 - 30.09.20 - 12:05
(2) запиши в файл и прочитай из него ДД, будут совпадать?
   fisher
 
6 - 30.09.20 - 12:05
(2) Это BOM UTF-8
   Franchiser
 
7 - 30.09.20 - 12:05
   Chameleon1980
 
8 - 30.09.20 - 12:06
(4) с куали там что-то пишется в начале? там пишется только то, что ты пишешь
   Oldman06
 
9 - 30.09.20 - 12:07
Все, спасибо. Уже разобрался.
   Franchiser
 
10 - 30.09.20 - 12:08
(8) если у тебя есть файл-картинка, и ты изменил ему удалил расширение, то есть программы которые могут все-равно понять что это картинка, или найти через hex определенную подпись.
   trad
 
11 - 30.09.20 - 12:08
(8) как бы файл в юникоде должен в начале содержать BOM
Для утф8 - это (7)
   fisher
 
12 - 30.09.20 - 12:11
(11) Не "должен" - "может".
   fisher
 
13 - 30.09.20 - 12:15
(9) А как разобрался, кстати? Вообще странно, что по-разному пишет. И без BOM, ЕМНИП, 1С нельзя заставить писать. Только выкусывать.
   Franchiser
 
14 - 30.09.20 - 12:16
(13) вероятно не указал где-то кодировку
   fisher
 
15 - 30.09.20 - 12:19
Ыыыы! В конструкторе ЗаписьТекста() на основании потока можно управлять BOM, а в файловом - нельзя :)
   fisher
 
16 - 30.09.20 - 12:20
И просто по дефолту в память без BOM пишется. РТФМ, короче.
   Oldman06
 
17 - 30.09.20 - 12:21
(13) Двоичные данные отличаются только наличием 3 байтов (EF BB BF) в случае с временным файлом, в остальном идентичны. Просто я сразу не заметил, так как сверял с начала. Вероятно это BOM. В любом случае, далее он не нужен и отрезался. Все это для формирования тела POST-запроса.
   trad
 
18 - 30.09.20 - 12:22
(15) ну вот видимо в одинес считают что не "может", а "должен"
))
   Franchiser
 
19 - 30.09.20 - 12:23
при желании можно BOM отдельно дописать
   fisher
 
20 - 30.09.20 - 12:27
(18)(19) Ну вот как раз при записи в память пятым параметром конструктора можно явно указать - писать BOM или нет.

Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.