Introduktion till ByteArray

ByteArray är en extremt kraftfull klass som kan användas för många saker relaterade till dataprofilering, inklusive (men inte begränsat till) att spara speldata online, kryptera data, komprimera data och konvertera ett BitmapData-objekt till en PNG- eller JPG-fil. I denna introduktion använder vi klassen ByteArray för att ta ett inbyggt AS3-objekt och koda det för en sträng som kan sparas på en server för senare återställning och avkoda den senare.

I tidigare tutorials har vi sett hur man använder XML och JSON för att koda data i ett textformat (String) format. Men både XML och JSON är utformade för att vara läsbara och därför är de mycket längre än de behöver vara. Det kan också vara svårt att konvertera vissa typer av AS3-objekt till antingen format. ByteArray har några riktigt avancerade funktioner, men till att börja med tittar vi bara på en enkel: det gör det väldigt lätt att göra ett AS3-objekt till en sträng.


Slutresultatförhandsvisning

Låt oss ta en titt på det slutliga resultatet vi ska arbeta för:

När du klistrar in en kodad ByteArray-sträng i TextField och klickar på knappen Ladda, dekrypterar den den och visar objektegenskaperna som är sparade i den. Du kan prova följande kodade ByteArrays; kopiera-klistra in dem i TextField och klicka på Load-knappen för att se vad jag pratar om:

 // Denna ByteArray kommer att visa min data (Detta är standard ByteArray laddad) CgsBFW9jY3VwYXRpb24GB0NUTw93ZWJzaXRlBiFodHRwOi8vaWt0LmNvLmlkCW5hbWUGDVRhdWZpawE =
 // Detta Array kommer att visa min nuvarande tanke CgsBIWZvb2RfZm9yX3Rob3VnaHQGgnVJIGFtIHRoaW5raW5nIG9uIHNoYXJpbmcgdGhlIHRlY2huaXF1ZSBpIHVzZWQgdG8gbWFrZSBhIEZ1bGwgRmxhc2ggRHluYW1pYyBXZWJzaXRlIFNFTyBGcmllbmRseSBmb3IgbXkgbmV4dCBUdXRvcmlhbCBpbiBBY3RpdmVUdXRzKy4uLiA8dT5XaGF0IGRvIHlvdSB0aGluaz88L3U + IDxiPmlzIGl0IGEgZ29vZCBpZGVhPC9iPj8B
 // Detta Array kommer att tala om Flash och SEO och min erfarenhet av dem CgsBEXF1ZXN0aW9uBoEDPGI + PHU + Q2FuIGEgZnVsbHkgZHluYW1pYyBGbGFzaCBXZWJzaXRlIGJlIFNFTyBmcmllbmRseTwvdT48L2I + Pz8NYW5zd2VyBoM / SXQgY2FuLCBoZXJlIGlzIHRoZSBwcm9vZiwgPGEgaHJlZj0naHR0cDovL3d3dy5nb29nbGUuY28uaWQvc2VhcmNoP3E9Zmxhc2grc2VvJmllPXV0Zi04Jm9lPXV0Zi04JmFxPXQnIHRhcmdldD0nX2JsYW5rJz5odHRwOi8vd3d3Lmdvb2dsZS5jby5pZC9zZWFyY2g / cT1mbGFzaCtzZW8maWU9dXRmLTgmb2U9dXRmLTgmYXE9dDwvYT4sIGlrdC5jby5pZCBpcyByYW5rZWQgIzYgb3ZlciB0aGVyZQE =

Steg 1: Skapa nytt ActionScript-projekt

Inom fönstret "Flash Builder":

  1. Öppna Flash Builder 4
  2. Klicka på Arkiv-menyn
  3. Byt till nytt
  4. Klicka på ActionScript Project

Steg 2: Ny ActonScript Project Setup

Inom fönstret "New ActionScript Project":

  1. Skriv 'TUTORIAL_ByteArray' i fältet Projektnamn
  2. Kom ihåg var du sparar ditt projekt
  3. Klicka på "Slutför" -knappen

Steg 3: Base64.as

Kopiera Base64.as till ditt projekt "com" -katalog.

  1. Skapa en ny "com" -katalog i din källkatalog.
  2. Ladda ner filen Base64.as från källnedladdningen.
  3. Lägg filen i den nyskapade "com" katalogen.

Base64.as kommer att komma till nytta senare. Det är av Steve Webster, som brukade bo på dynamicflash.com (han lämnade Flash-samhället för några år sedan).


Steg 4: Nödvändiga klasser

I TUTORIAL_ByteArray klass (som är huvudklassen), vänligen importera följande klasser för denna handledning:

 paket import flash.display.Sprite; importera flash.text.TextField; importera flash.text.TextFieldType; importera flash.text.TextFieldAutoSize; importera flash.text.TextFormat; importera flash.events.MouseEvent; importera flash.utils.ByteArray; importera com.Base64; public class TUTORIAL_ByteArray utökar Sprite public function TUTORIAL_ByteArray () 

Steg 5: Bli van vid Flash Builder I

Lägg till följande kod inuti TUTORIAL_ByteArray Konstruktör för ett mycket enkelt test.

 offentlig funktion TUTORIAL_ByteArray () var _test: String = "Hej värld!"; trace (_test); 

Tryck på F11-tangenten för att köra det här projektet, du borde få meddelandet i konsolfönstret.


Steg 6: Bli van vid Flash Builder II

Låt oss nu försöka spåra meddelandet inuti _testa variabel, men den här gången kommer vi att göra det från en annan funktion:

 offentlig funktion TUTORIAL_ByteArray () var _test: String = "Hej värld!"; TestFunction ();  privat funktion TestFunction (): void trace (_test); 

Tryck på CTRL + S för att spara ditt projekt. Ett fel upptäcktes när du sparade ditt projekt Detta beror på att en variabel som har deklarerats inuti en funktion inte kommer att vara tillgänglig för någon annan funktion. Så för det här fallet måste vi förklara _testa variabel utanför:

 offentlig funktion TUTORIAL_ByteArray () TestFunction ();  privat funktion TestFunction (): void trace (_test);  private var _test: String = "Hej värld!";

Steg 7: Nödvändiga privata variabler

Lägg till följande privata variabler för det här projektet:

 offentlig funktion TUTORIAL_ByteArray () TestFunction ();  privat funktion TestFunction (): void trace (_test);  private var _test: String = "Hello World!"; privat var _loadButton: TextField; privat var _inputField: TextField; privat var _testObject: Objekt; privat var _testByteArray: ByteArray;

Steg 8: UI

Låt oss skapa ett enkelt användargränssnitt för detta projekt.

Nu när vi behöver visa något i vårt projekt måste vi förklara våra scenstorlekar (Check Line 13).

Byt namn på vår TestFunction i InitUI-funktionen och sätt in följande radkoder inuti. Läs den förklaring som kommenteras inuti koden.

 [SWF (bredd = "550" ,, frameRate = "60", pageTitle = "Tutorial ByteArray")] allmän klass TUTORIAL_ByteArray utökar Sprite public function TUTORIAL_ByteArray () InitUI ();  privat funktion InitUI (): void // Initialisera våra TextFields så att vi kan använda dem _loadButton = new TextField (); _inputField = nytt TextField (); // Ge en defaultTextFormat för båda (Tahoma vid 11pt, färgad 0x777777) _loadButton.defaultTextFormat = _inputField.defaultTextFormat = new TextFormat ("Tahoma", 11, 0x777777); // Ge dem båda en gräns _loadButton.border = _inputField.border = true; // Ställ autosize för vår Load Button, så att den automatiskt kommer att krympa / växa för att passa texten inuti _loadButton.autoSize = TextFieldAutoSize.LEFT; // Ställ in den valbara av vår Load Button till false, så att användaren inte kan välja texten i den _loadButton.selectable = false; // Ställ in flervals- och wordWrap i vårt Inmatningsfält till sant, så att en lång text automatiskt läggs in i nästa rad _inputField.multiline = _inputField.wordWrap = true; // Aktivera användaren att skriva något i vårt Inmatningsfält genom att ställa in denna typ av egenskap _inputField.type = TextFieldType.INPUT; // Sätt lite text i Båda dem _loadButton.text = "Ladda"; _inputField.text = ""; // Lägg till båda i scenen så att de är synliga för våra besökare addChild (_inputField); addChild (_loadButton); // Placera vårt Inmatningsfält och gör det större _inputField.x = 25; _inputField.y = 25; _inputField.width = 200; _inputField.height = 150; // Det finns en anledning till att jag gjorde det så att lastknappen ligger direkt under vårt Inmatningsfält // Så du kan placera Inmatningsfältet var du än vill, så länge det finns denna kod, håller laddningsknappen fast under Inmatningsfältet _loadButton.y = _inputField.y + _inputField.height; _loadButton.x = _inputField.x; 

Tryck på F11 för att köra det här projektet och se det enkla användargränssnittet vi har skapat.


Steg 9: Aktivera interaktivitet

Läs den förklaring som kommenteras inuti koden

 _loadButton.y = _inputField.y + _inputField.height; _loadButton.x = _inputField.x; // Lägg till en händelselysare för vår _loadButton, så när användaren klickar på den här knappen, // Flash kommer att ringa _loadButton_CLICK () Metod _loadButton.addEventListener (MouseEvent.CLICK, _loadButton_CLICK, false, 0, true);  // Denna metod kommer att ringas när användaren klickar på _loadButton privat funktion _loadButton_CLICK (Händelser: MouseEvent = null): void // Få allt som användaren anger och spara dem i vår _test-variabel _test = _inputField.text; // Spåra _test-variabelspåret ("Användare matar in följande meddelande:" + _test); 

Tryck på F11 för att köra detta projekt; försök att skriva något i _Inmatningsområde och klicka sedan på _loadButton. Det här är den mest grundläggande tekniken för att få en variabel från vår användare och lagra den i vår privata variabel.


Något att tänka på

Vi har äntligen nått våra viktigaste steg i detta projekt, men innan vi fortsätter låter jag ge en mental stimulans för att tänka. För närvarande i vårt projekt kan vi få en Sträng och lagra den i vår privata variabel. Men det är bara en sträng; vad sägs om om jag vill att en användare ska skriva in något inuti _Inmatningsområde så att jag kan få en Objekt från det? Vad ska användaren skriva? Svaret är en "Encoded Base64 ByteArray"


Steg 10: Introduktion till ByteArray

Vi kommer att fortsätta långsamt den här gången, så att du förstår ByteArray-klassen och kan skapa din egen datapanulering och tillämpa den på dina egna projekt. Läs den förklaring som kommenteras inuti koden:

 offentlig funktion TUTORIAL_ByteArray () InitUI (); CreateByteArray ();  privat funktion CreateByteArray (): void // Initialisera vår _testObject-variabel så att vi kan fylla i många dynamiska egenskaper och lagra String-data i den (vi laddar dem senare när användaren klickade på _loadButton) _testObject = new Object (); _testObject.name = "Taufik"; _testObject.website = "http://ikt.co.id"; _testObject.occupation = "CTO"; // Initiera vår _byteArray-variabel så att vi kan börja konvertera objekt till en ByteArray _testByteArray = ny ByteArray (); // Konvertera objektet till Byte Array, så här gör du det, för att konvertera ett objekt till en ByteArray, det är enkelt det är inte det? :)) _testByteArray.writeObject (_testObject); // Låt se om allt fungerar korrekt spår ("Vår första ByteArray skapade ::" + _testByteArray.toString ()); 

Tryck på F11 för att köra det här projektet. Se hur enkelt det är, denna ByteArray är en extremt kraftfull klass och ändå är det inte svårt alls. Vi har tagit ett inbyggt AS3-objekt och konverterat det till Action Message Format.

Innan vi skickar data till vårt PHP-skript med hjälp av GET-metoden ska vi konvertera den till en Base64-sträng. Detta beror på att Base64 kan bäras av XML (och av HTML).


Steg 11: Kodning av ByteArray i Base64 String

Läs den förklaring som kommenteras inom koden.

 privat funktion CreateByteArray (): void // Initialisera vår _testObject-variabel så att vi kan fylla många dynamiska egenskaper och lagra String-data i den // (vi laddar dem senare när användaren klickar på _loadButton) _testObject = nytt objekt (); _testObject.name = "Taufik"; _testObject.website = "http://ikt.co.id"; _testObject.occupation = "CTO"; // Initiera vår _byteArray-variabel så att vi kan börja konvertera objekt till en ByteArray _testByteArray = ny ByteArray (); // Konvertera objektet till Byte Array, så här gör du det, för att konvertera ett objekt till en ByteArray, det är enkelt det är inte det? :)) _testByteArray.writeObject (_testObject); // Koda ByteArray till Base64 String (så att vi kan skicka dem via PHP eller kopiera texten till anteckningsblock), igen är det mycket enkelt! var kodade: String = Base64.encodeByteArray (_testByteArray); // Sätt den kodade Base64-strängen i vår _inputField (så att vi kan kopiera dem till anteckningsblock) _inputField.text = encoded; 

Tryck på F11 för att köra det här projektet. Om du konverterar ett objekt till en ByteArray är det enkelt att konvertera Byte-värdet av våra data till Base64-strängen, tack vare Base64.as.


Steg 12: Konvertera kodad Base64 String i Objekt

Vi kommer att försöka avkoda den angivna Base64-strängen i ett objekt när användaren klickar på _loadButton, ändra vår _loadButton_CLICK fungera. Läs den förklaring som kommenteras inuti koden:

 privat funktion _loadButton_CLICK (Händelser: MouseEvent = null): void // Vi måste få några felprov // Vi avkodar vår kodade Base64-sträng i en ByteArray, så att vi kan hämta vårt objekt tillbaka var DecodedByteArray: ByteArray = Base64. decodeToByteArray (_inputField.text); // Om det är enkelt att konvertera ett objekt till ByteArray är det enkelt att hämta ett objekt från ByteArray som det här var LoadedObject: Object = DecodedByteArray.readObject (); // Förbered att mata ut alla egenskaper och deras värden inuti LoadedObject var Output: String = ""; för (var VarName: String i LoadedObject) Output + = VarName + ":" + LoadedObject [VarName] + "
"; // Utför dem till vår _inputField _inputField.htmlText = Output; fånga (fel: Fel) _inputField.text =" Var god mata in en kodad byteray i denna textfält innan du klickar på knappen "ladda". Felmeddelande :: "+ err.message;

Tryck på F11 för att köra det här projektet. Vi får vår kodade Base64-sträng av vår _testObject inuti vårt _Inmatningsområde; Klicka på _loadButton för att se vårt projekt konvertera denna Base64-sträng tillbaka och visa alla dess egenskaper och värden. Du kan försöka kopiera och klistra in Base64-strängarna i början av denna handledning och läs alla mina meddelanden.


Slutsats

ByteArray-klassen är en extremt kraftfull klass, och ändå är den väldigt enkel att använda. Jag har sett många bra Flash-appar där ute genom att använda denna ByteArray för att utföra så många sinneblåsande dataprofilering, som de som jag nämnde i början av denna handledning. Jag har hört att många Flash-spelprogrammerare använder XML för att rädda sina besökare "Spara speldata", men som vi alla redan vet är XML ett helvete av en mycket komplicerad klass, med ByteArray kan jag spara något som detta enkelt.

 privat funktion CreateByteArray (): void _testObject = nytt objekt (); _testObject.name = "Taufik"; _testObject.website = "http://ikt.co.id"; _testObject.occupation = "CTO"; _testObject.level = 99; // Hämta tillståndet för denna spelteckenförteckning var _inventory: Array = new Array (item_id: 5, mängd: 1, item_id: 85, mängd: 1, item_id: 42, mängd: 5); _testObject.inventory = _inventory; // Hämta vad är den färdighet som de redan level up var _skill: Array = new Array (skill_id: 1, level: 0, skill_id: 2, level: 1); _testObject.skill = _skill; // Initiera vår _byteArray-variabel så att vi kan börja konvertera objekt till en ByteArray _testByteArray = ny ByteArray (); // Konvertera objektet till Byte Array, så här gör du det, för att konvertera ett objekt till en ByteArray, det är enkelt det är inte det? :)) _testByteArray.writeObject (_testObject); // Koda ByteArray till Base64 String (så att vi kan skicka dem via PHP eller kopiera texten till anteckningsblock), igen är det mycket enkelt! var kodade: String = Base64.encodeByteArray (_testByteArray); // Sätt den kodade Base64-strängen i vår _inputField (så att vi kan kopiera dem till anteckningsblock) _inputField.text = encoded; 

Ja, det här komplicerade tar bara ett par koder, föreställ dig skräcken att spara den här dataen med hjälp av XML och hämta dem tillbaka för vidare användning. Sammantaget måste jag säga att med Byte dataprofilering kan du uppnå många saker, och det kan vara en lösning som du letat efter hela tiden.

Jag hoppas att du har hittat denna handledning användbar. Tack för att du läser!