保存2种使用一个FILESTREAM数据的? [英] save 2 kinds of data using one filestream?

查看:209
本文介绍了保存2种使用一个FILESTREAM数据的?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

林节约2种数据(文本和图像)。是否有可能节省2类型的数据,在使用1 FILESTREAM同一时间?例如

Im saving 2 kinds of data(text and image). Is it possible to save 2 types of data at the same time using 1 filestream? example

var myTextFileObj:Object = new Object()
myTextFileObj["Name"]="George Borming" 
var imgByteData:ByteArray = jpgEncoder.encode(myBitmapData);//lets assume i have a bitmap data here

var folder:File = File.documentsDirectory.resolvePath("myApp/images/image.jpg");
var folder2:File = File.documentsDirectory.resolvePath("myApp/textfiles/mytext.txt");

fileStream = new FileStream();  
fileStream.addEventListener(Event.CLOSE, saveImg_FS_fileClosed);
fileStream.addEventListener(Event.COMPLETE, saveImg_FS_completeHandler); 
fileStream.addEventListener(ProgressEvent.PROGRESS, saveImg_FS_progressHandler); 
fileStream.addEventListener(IOErrorEvent.IO_ERROR, saveImg_FS_errorHandler); 

fileStream.openAsync(folder, FileMode.UPDATE);  
fileStream.writeBytes(imgByteData)

fileStream.openAsync(folder2, FileMode.UPDATE);  
fileStream.writeObject(myTextFileObj);
fileStream.close();

将这项工作?是否有可能还是我只想创建2个文件流并保存DATAS分开会更好。如果可能的话,我的code是错误的,请你能教我正确的codeS。

Will this work?Is it possible or would it be better if i would just create 2 filestream and save the datas seperately. IF it is possible and my code is wrong, please can you teach me the right codes.

推荐答案

这当然是可能的。可能的问题,但,是你正在使用 openAsync ,因此文件流的操作仍在进行中,当你试图打开另外一个文件,你之前没有关闭第一个文件打开第二

It's certainly possible. The likely issue though, is that you are using openAsync, so the file stream operation is still in progress when you try open another file and you don't close the first file before opening the second.

您或者您需要为等到第一个操作完成启动第二或之前的打开的文件同步使用打开 openAsync >。

You either you need to wait until the first operation completes before starting the second, or open the files synchronously using open instead of openAsync.

例如:

var folder:File = File.documentsDirectory.resolvePath("myApp/images/image.jpg");

fileStream = new FileStream();  
fileStream.addEventListener(Event.CLOSE, saveImg_FS_fileClosed);
fileStream.addEventListener(Event.COMPLETE, saveImg_FS_completeHandler); 
fileStream.addEventListener(ProgressEvent.PROGRESS, saveImg_FS_progressHandler); 
fileStream.addEventListener(IOErrorEvent.IO_ERROR, saveImg_FS_errorHandler); 

fileStream.open(folder, FileMode.UPDATE);  //use open instead of open Async
fileStream.writeBytes(imgByteData)
fileStream.close(); //close the current File so you can open a new one

folder = File.documentsDirectory.resolvePath("myApp/textfiles/mytext.txt");
fileStream.open(folder, FileMode.UPDATE);  
fileStream.writeObject(myTextFileObj);
fileStream.close();


如果你的两个文件总是打开/保存在一起,你会发现它的清洁剂使用自定义类/型号为要保存的项目,然后用 FileStream.writeObject 这个类序列化到只有一个文件。


If your two files are always opened / saved together, you may find it cleaner to use a custom class/model for the items you want to save, then use FileStream.writeObject to serialize that class to just one file.

事情是这样的:

package {
    import flash.utils.ByteArray;

    public class SaveData {
        public var textFile:Object;
        public var imageByteData:ByteArray;
        //any other properties
    }
}

然后,你可以这样做:(在构造函数或其它地方)

Then, you can do this: (in your constructor or wherever)

flash.net.registerClassAlias("SaveData",SaveData);
flash.net.registerClassAlias("flash.utils.ByteArray",ByteArray);
//you have to register every non primitive class referenced by SaveData (including nested classes)

然后将其保存到文件,你做这些方针的东西:

Then to save it to file, you do something along these lines:

var myTextFileObj:Object = new Object()
myTextFileObj["Name"]="George Borming";

var mySaveData:SaveData = new SaveData();
mySaveData.textFile = myTextFileObj;
mySaveData.imageByteData = jpgEncoder.encode(myBitmapData);//lets assume i have a bitmap data here

var folder:File = File.documentsDirectory.resolvePath("myApp/mySaveData.data");

fileStream = new FileStream();  
fileStream.addEventListener(Event.CLOSE, saveImg_FS_fileClosed);
fileStream.addEventListener(Event.COMPLETE, saveImg_FS_completeHandler); 
fileStream.addEventListener(ProgressEvent.PROGRESS, saveImg_FS_progressHandler); 
fileStream.addEventListener(IOErrorEvent.IO_ERROR, saveImg_FS_errorHandler); 

fileStream.openAsync(folder, FileMode.WRITE);  

//serialize it to the file with writeObject
fileStream.writeObject(mySaveData);
fileStream.close();


//then later when you want to read it back in
var mySaveData:SaveData = fileStream.readObject();
trace(mySaveData.textFile["Name"]); //George Borming

此方式,要在1个文件,你可以有尽可能多的对象。

This way you can have as many objects as you want in 1 file.

这篇关于保存2种使用一个FILESTREAM数据的?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆