Показать сообщение отдельно
Старый 14.11.2013, 22:01
uglan вне форума Посмотреть профиль Отправить личное сообщение для uglan Посетить домашнюю страницу uglan Найти все сообщения от uglan
  № 1  
Ответить с цитированием
uglan

Регистрация: Mar 2003
Адрес: moscow
Сообщений: 102
Отправить сообщение для uglan с помощью ICQ Отправить сообщение для uglan с помощью Skype™
Question Скаченный файл отличается от оригинала(URLStream)

Скачиваю файл с помощью URLStream, а на выходе размеры изначального файла и скаченного отличаются. Например, 22,526,758 bytes -VS- 22,527,070 bytes... Визуально вроде ничего не меняется, но вот с видеоролики страдают(что-то с ключевыми точками). Да и вообще, почему так происходит и как это лечить?

Ниже код качателя:
Код AS3:
package {
	import flash.events.DataEvent;
	import flash.events.Event;
	import flash.events.EventDispatcher;
	import flash.events.OutputProgressEvent;
	import flash.events.ProgressEvent;
	import flash.filesystem.File;
	import flash.filesystem.FileMode;
	import flash.filesystem.FileStream;
	import flash.net.URLRequest;
	import flash.net.URLStream;
	import flash.utils.ByteArray;
 
	public class Downloader extends EventDispatcher
	{
		[Event(name = "DownloadComplete",type = "DownloadEvent")]
 
		private var file:File;
		private var fileStream:FileStream;
		private var url:String;
		private var urlStream:URLStream;
 
		private var waitingForDataToWrite:Boolean = false;
 
		public function Downloader()
		{
			urlStream = new URLStream();
 
			urlStream.addEventListener(Event.OPEN, onOpenEvent);
			urlStream.addEventListener(ProgressEvent.PROGRESS, onProgressEvent);
			urlStream.addEventListener(Event.COMPLETE, onCompleteEvent);
 
			fileStream = new FileStream();
			fileStream.addEventListener(OutputProgressEvent.OUTPUT_PROGRESS, writeProgressHandler);
 
		}
 
		public function download(formUrl:String, toFile:File):void
		{
			this.url = formUrl;
			this.file = toFile;
			fileStream.openAsync(file, FileMode.WRITE);
			urlStream.load(new URLRequest(url));
		}
 
		private function onOpenEvent(event:Event):void
		{
			waitingForDataToWrite = true;
 
			dispatchEvent(event.clone());
		}
 
		private function onProgressEvent(event:ProgressEvent):void
		{
			if (waitingForDataToWrite)
			{
				writeToDisk();
				dispatchEvent(event.clone());
			}
		}
 
		private function writeToDisk():void
		{
			var fileData:ByteArray = new ByteArray();
			trace(urlStream.bytesAvailable);
			urlStream.readBytes(fileData, 0, urlStream.bytesAvailable);
			fileStream.writeBytes(fileData,0,fileData.length);
			waitingForDataToWrite = false;
 
			dispatchEvent(new DataEvent(DataEvent.DATA));
		}
 
		private function writeProgressHandler(evt:OutputProgressEvent):void
		{
			waitingForDataToWrite = true;
		}
 
		private function onCompleteEvent(event:Event):void
		{
			if (urlStream.bytesAvailable > 0)
			{
				writeToDisk();
			}
			fileStream.close();
 
			fileStream.removeEventListener(OutputProgressEvent.OUTPUT_PROGRESS, writeProgressHandler);
 
			dispatchEvent(event.clone());
			// dispatch additional DownloadEvent
			dispatchEvent(new DownloadEvent(DownloadEvent.DOWNLOAD_COMPLETE, url, file));
		}
 
}}
__________________
uglan