![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
![]() |
|
|||||
|
Регистрация: Jun 2009
Сообщений: 42
|
Доброго времени суток
у мея проблема: дан вектор строк, нужно его перегнать в ByteArray и сжать - это работает затем ByteArray перегнать в строку - это ВРОДЕ работает затем эту строку перегнать в ByteArray - это ВРОДЕ работает ByteArray разжать и перегнть в вектор строк - это НЕ рабоает значит, как это делаю var lvlCodes:Vector.<String> = new Vector.<String>(); // инициализация lvlCodes ... var byteArr:ByteArray = new ByteArray(); byteArr.writeObject(lvlCodes); byteArr.compress(); byteArr.position = 0; var str:String = byteArr.readUTFBytes(byteArr.length); byteArr.writeUTFBytes(str); byteArr.position = 0; // тут ошибка возникает byteArr.uncompress(); lvlCodes = byteArr.readObject(); const len:uint = lvlCodes.length; for (var i:uint; i < len; ++i) { trace(lvlCodes[i]); } |
|
|||||
|
Регистрация: Dec 2007
Сообщений: 204
|
Ошибка возникает из-за того что в byteArr (перед byteArr.uncompress()) присутствуют метаданные, сначала необходимо отделить метаданные.
Грубо говоря byteArr после byteArr.compress() не равно byteArr после byteArr.writeUTFBytes(str); Трейсами это будет сразу видно. Вот та же самая тема http://www.flasher.ru/forum/showthre...ight=ByteArray
__________________
http://www.infinity3d-engine.com Последний раз редактировалось MonkDead; 04.07.2009 в 15:33. |
|
|||||
|
Регистрация: Jun 2009
Сообщений: 42
|
ага, понятно, трейсами все посмотрел, действительно есть различия
но как тделить методанные? Последний раз редактировалось bugizavr; 04.07.2009 в 16:27. |
|
|||||
|
Et cetera
Регистрация: Sep 2002
Сообщений: 30,787
|
Интересно, как вы бинарник таким вот образом в строку загонять собрались? Строка закончится там, где он встретит нулевой байт.
Последний раз редактировалось etc; 04.07.2009 в 18:43. |
|
|||||
|
Регистрация: Jun 2009
Сообщений: 42
|
__etc - вы уверены? с с++ не путаете строки?
на самом деле, код что я представил рабочий, ещё как работает)) ошибка возникает если использовать другой экземпляр ByteArray вот такие дела ======================================= кто-нибудь знает как отделить метаданные?) |
|
|||||
|
Et cetera
Регистрация: Sep 2002
Сообщений: 30,787
|
Нет, не путаю. Простейший пример:
Оно у вас будет работать до тех пор, пока не встретит нулевой байт. И, судя по проблеме, именно из-за этого и не работает. Причем тут метаданные объекта для десериализации, честно говоря, не знаю. |
|
|||||
|
Регистрация: Jun 2009
Сообщений: 42
|
ага, спасибо __etc
буду разбираться |
|
|||||
|
Регистрация: Dec 2007
Сообщений: 204
|
Цитата:
Вот набросал код под Air, возможно поможет. Открывает тестовый файл (input.txt) записывает текст в ByteArray, сжимает и сохраняет в файл (output.byt). К сожалению проверить код не могу нет под руками ПО, но код должен работать. package { import flash.filesystem.*; import flash.utils.*; import flash.display.*; public class Converter extends Sprite { public function Air() { var bytes:ByteArray = new ByteArray(); var inBytes:ByteArray = new ByteArray(); this.readFile("input.txt", inBytes); var str:String = inBytes.toString(); bytes.writeUTF(str); // или bytes.writeUTFByte(str); // или на крайней случай bytes.writeObject(str); bytes.position = 0; bytes.compress(CompressionAlgorithm.DEFLATE); this.outFile("output.byt", bytes); } public function readFile(fileName:String, data:ByteArray):void { var inFile:File = File.desktopDirectory; inFile = inFile.resolvePath(fileName); var inStream:FileStream = new FileStream(); inStream.open(inFile, FileMode.READ); inStream.readBytes(data, 0, data.length); inStream.close(); data.position = 0; } public function outFile(fileName:String, data:ByteArray):void { var outFile:File = File.desktopDirectory; outFile = outFile.resolvePath(fileName); var outStream:FileStream = new FileStream(); outStream.open(outFile, FileMode.WRITE); outStream.writeBytes(data, 0, data.length); outStream.close(); } } }
__________________
http://www.infinity3d-engine.com Последний раз редактировалось MonkDead; 04.07.2009 в 19:23. |
|
|||||
|
Et cetera
Регистрация: Sep 2002
Сообщений: 30,787
|
Ну я бы не сохранял бинарник в файл с расширением txt
![]() |
|
|||||
|
Регистрация: Dec 2007
Сообщений: 204
|
__etc, я еще не дописал код
Тут с ходу кропал.
__________________
http://www.infinity3d-engine.com |
![]() |
![]() |
Часовой пояс GMT +4, время: 02:29. |
|
|
« Предыдущая тема | Следующая тема » |
|
|