ByteArray 타입의 바이너리 데이터를

웹에서 사용할 수 있는 문자열로 변환해줍니다.

아래의 1번 예제는

1. 유저의 이미지를 불러와 Bitmap.draw() 로 찍은 후에

2. JPEncoder 를 통해서 ByteArray로 인코딩을 합니다.

3. 이렇게 인코딩된 ByteArray를 텍스트로 변환합니다.

4. 텍스트를 클립보드로 복사합니다. (ctrl + c)

2번 예제는

1. 입력된(ctrl + v ) 텍스트를 읽어와서

2. ByteArray로 다시 변환합니다.

3. 이렇게 변환된 ByteArray를 다시 Loader를 이용해서 이미지로 로드해옵니다.



1) Binary -> Text



2) Text -> Binary



사용법은 간단합니다.

ByteArray를 텍스트로 변환하려면

var text: String = new StringSerializer().serialize( byte );

텍스트를 ByteArray로 다시 변환하려면

var byte: ByteArray = new StringSerializer().unserialize( text );

이렇게 사용하면 됩니당.

에러가 간혹 있을 수도 있습니다. 에러같은거 보이시면 바로 댓글 ㄱㄱ


StringSerializer.as



데이터의 증감률은 테스트해보니 아래처럼 나왔습니다.

13,624 byte 가 17,313(34,626 byte)의 문자로 변환 약 254% 증가.

10,862 byte 가 13,293(26,586 byte)의 문자열로 변환 약 248% 증가.

대략 2.5배 정도 용량이 늘어나더군요.

64개의 문자를 가지고 6 bit 단위로 치환하는 방식이기 때문에 모두 웹에서 표현할 수 있는 문자열입니다.

그리고 Preset 도 지정할 수 있어서 활용하기 좋을거 같습니다.

잇힝~

p.s) XML에 이미지가 들어가는 티스토리의 백업기능을 보고 흉내내봤습니다.


저작자 표시 비영리 동일 조건 변경 허락
신고
  1. Favicon of http://ruudnike.tistory.com 니케" 2009.04.03 09:07 신고

    오호~ 멋진데요 형! ㅎㅎ
    티스토리의 백업 기능이 이런거군요!

  2. Favicon of http://blog.flashplatform.kr 검쉰 2009.04.03 10:06 신고

    오홍. 멋진데요 ㅎ

    • Favicon of http://wooyaggo.tistory.com 우야꼬  2009.04.04 00:37 신고

      이힛~ 코드가 깔끔치 않아서 찝찝하긴 한데
      나름 쓸 방도가 많을거 같아서 공개해봤어용~

  3. Favicon of http://okgosu.tistory.com okgosu 2009.04.03 14:37 신고

    오옷...정말 멋지네요...
    잘보고 갑니다...

    with okgosu (-..-)a

    ps. 위에 검쉰님 방가~

    • Favicon of http://wooyaggo.tistory.com 우야꼬  2009.04.04 00:38 신고

      헤헤 이미 남들이 해놓은거지만
      내 손으로도 만들어봤다~ 라는 성취감이 좋았어용^^
      또 이쁜거 만들어서 올려볼께용~

  4. Favicon of http://http:/ 쫑쫑쫑 2009.04.04 01:34 신고

    우히히 +_+ b 역시 햇님은 킹왕짱이에요 ;; 저는 쉬프트 연산자만 봐도 정신이 혼미해지는데 ㅠ.,ㅠ

  5. Favicon of http://butterguy.tistory.com 버터백통 2009.04.04 09:18 신고

    오홍홍~~ 멋져부려~

  6. Favicon of http://kindmonkey.pe.kr 날아보자 2009.04.05 15:18 신고

    오오 멋져욤.+_+

  7. Favicon of http://inome.tistory.com inome 2009.04.07 00:01 신고

    멋지시네용~

  8. Favicon of http://lovedev.tistory.com lovedev 2009.04.07 19:04 신고

    난 Flash flatform에서 모든 데이터의 입출력은 ByteArray로 하고 싶은 1人 인데 ^^
    우야꼬가 한번 해봥~ :)
    멋지다! 근데 짤방이 없어?

    • Favicon of http://wooyaggo.tistory.com 우야꼬  2009.04.07 23:14 신고

      괜춘한데요?
      시간나면 한번 큰그림 그려봐야겠어요.
      짤방은 맨날 나가면 식상하자나요 ㅋㅋ
      다음 짤방을 기대해주셈~

  9. Favicon of http://hangunsworld.com Han Sanghun 2009.04.09 20:01 신고

    저걸 디비에 때려 넣으면 서버 터지겠군 ㅋㅋㅋ

  10. 야매코더 2009.04.21 14:23 신고

    우야꼬님 그때 컨퍼런스에서 보여주셨던 이미지 리사이져 도 위와 같은원리로 제작하신건가요 ?

    • Favicon of http://wooyaggo.tistory.com 우야꼬  2009.04.22 16:01 신고

      아니요 그것과는 다른거에요.
      비트맵 찍는건 마찬가지지만 여기서 나온 코드는 별개이지요~

  11. andwhy 2009.05.12 17:27 신고

    오옷...안와본 사이에 신기한글들이 늘었구나~~~
    저거 비트맵데이터 말고도 다 사용할수 있는거네...+_+ 딱히 어따쓸수있을지는 모르겠지만...
    잘생각해보면 쓸수 있는게 많을것같다~~~+_+

    근데 비트맵데이터 보니까 예전에 알바할때..어떤 외국분이...(flash8시절..) 이미지를 픽셀단위로 색상정보를 '0xff00ff'식으로 텍스트를 쫘라락 만들어서 서버에 올려놓게 만든소스가 생각난다;;;ㄷㄷㄷ
    한 30*30 이미지였나??작은거였는데 서버데이터 용량이 4M이상이였던거 같은...;;;

    • Favicon of http://wooyaggo.tistory.com 우야꼬  2009.05.17 02:47 신고

      관심이 식은거야~? 그런거야~?
      그나마 가장 원본 용량에 비슷해지는 택틱이 아닌가 싶어

  12. Favicon of http://blog.jidolstar.com 지돌스타 2009.05.17 01:55 신고

    매우 유익한 글이예요~~~~ ^^

  13. Favicon of http://blog.jidolstar.com 지돌스타 2010.04.23 12:34 신고

    이게 범용적으로도 사용할 수 있군.
    var a:String = "안녕하세요. 1234 ABCD 看样子他不会回来了。";
    var byte:ByteArray = new ByteArray;
    byte.writeUTFBytes(a);
    var s:String = StringSerializer.serialize(byte,true);
    trace( s );
    byte = StringSerializer.unserialize(s,true);
    trace( byte.readUTFBytes( byte.length ) );
    결과
    z5cAe38hg4vKif3W2a5Qio3KEW3KBazC1Z6=Lczee8GcE=35+fvB1yvHyG3PUaWPCw5PqoWHDMWBlR5P-rW3V1sEi=fEV
    안녕하세요. 1234 ABCD 看样子他不会回来了。

    27byte가 93byte가 된다. 하지만 String은 아무 쓸데없지...
    대신 이런건 어떨까?

    var id1:int = 1234;
    var id2:int = 9441991;
    var pos1:Number = 216.73013333;
    var pos2:Number = -83.66788611;
    var mag:Number = 4.31;
    var byte:ByteArray = new ByteArray;
    byte.writeInt(id1);
    byte.writeInt(id2);
    byte.writeDouble(pos1);
    byte.writeDouble(pos2);
    byte.writeDouble(mag);
    var s:String = StringSerializer.serialize(byte,true);
    trace( s );
    byte = StringSerializer.unserialize(s,true);
    id1 = byte.readInt();
    id2 = byte.readInt();
    pos1 = byte.readDouble();
    pos2 = byte.readDouble();
    mag = byte.readDouble();
    trace( id1, id2, pos1, pos2, mag );

    결과
    z5cRwngzO0hee-_rhyMfxN-Xhi1lzTWIDobwL9=31D+Yf-IKQVZDEhHNV
    1234 9441991 216.73013333 -83.66788611 4.31

    전체 32byte가 57byte가 되는군
    xml이나 db에 바로 넣게되는데 String만큼 쉬운것도 없긴 한데...
    크기가 커진다는 부담감이 없지않아 있네...

    뭔가 ByteArray값을 저장하는데 있어서 위와 같은 형태 말고 다른 방법이 없을까?

    • Favicon of http://wooyaggo.tistory.com 우야꼬  2010.04.23 14:25 신고

      와 괜찮은데요?
      타입별로 체크해서 불필요한 공간을 없애주는 거군요.
      크~ 죽이네요
      근데 하나 걸리는게
      저렇게 되면 어떤 타입들이 들어가는지 헤더가 들어가야할거 같아요. 그용량만 무시할정도가 되면 좋을거 같네요.
      아무래도 헤더크기-헤더내용-본문 이런식이 될텐데
      역시 혼자보다 여럿이서 코드를 주고 받으니 점점 좋아지네요^^
      형 짱~

  14. Favicon of http://blog.jidolstar.com 지돌스타 2010.04.23 14:55 신고

    아래 코드로 하면 1byte단위로 데이타를 String으로 변경할 수 있기 때문에 기본적으로 용량차이는 전혀 나지 않을듯..


    class Sbyte{

    static private var base:uint = 128;
    static private var encode:String = '!"#$%&()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖ×ØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ!"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghij';

    /**
    * ByteArray값을 String으로 변경
    * @param $byte
    * @return
    */
    static public function byteToString( $byte:ByteArray ):String{
    var result:String, i:uint, j:uint, position:int;
    position = $byte.position;
    $byte.position = 0;
    result = '';
    for( i = 0, j = $byte.length; i < j ; ++i ){
    result += encode.charAt( $byte.readByte() + base );
    }
    $byte.position = position;
    return result;
    }

    /**
    * String값을 ByteArray값으로 변경
    * @param $String
    * @return
    */
    static public function stringToByte( $String:String ):ByteArray{
    var result:ByteArray, i:uint, j:uint;
    result = new ByteArray;
    for( i = 0, j = $String.length; i < j ; ++i ){
    result.writeByte( encode.indexOf( $String.charAt( i ) ) - base );
    }
    result.position = 0;
    return result;
    }
    }


    아래처럼 사용하면 안됨
    trace( Sbytes.byteToString( Sbyte.stringToByte( “안녕하세요. 지돌스타입니다.” )) ); //bbbbb.bbbbbbbb.
    trace( Sbytes.byteToString( Sbyte.stringToByte( “Hello World!” )) ); //HellobWorld!


    반드시 ByteArray로 사용하면 잘된다. ^^

    출처 : http://www.diebuster.com/?p=1149

  15. Favicon of http://jidolstar.tistory.com 지돌스타 2010.04.27 11:32 신고

    이와 관련되어 트랙백 달고강~

  16. Favicon of http://blog.naver.com/jhb0b 호비스 2012.02.02 12:22 신고

    와 멋진데요. ~b
    트래픽에 대한 이슈만 없다면 다용도로 사용될수 있겠는데요 ~

+ Recent posts