らいちの自由気ままなブロク -22ページ目

らいちの自由気ままなブロク

えーとこちらのブロクは、基本的日常のことと実況やラジオなどのYouTubeやツイキャス関係時たまプログラムについてなどいろいろです!
まぁ読者になってくれると嬉しいです!
面白いとかいいねとか思ったらお友達にでもURLを回して下さい、お願いします

こんにちはー('-^*)/
はい、らいちでーす

早速ですけど進めて行きましょう

前回バイトデータの格納はできました
が、これではまだ使えませんよ
足りないものは以下の3つぐらいはできないと(;^_^

  • NFDデータを格納できるようにする
  • データを途中に追加できるようにする
  • データの取り出し

  • ということで今回はNFDデータの格納ですかね?

    とは言ったものの
    そこまで大変じゃないんですよね(*^▽^*)
    まぁ、ソースコードをバンっと

     /**
      * NFDデータをセットします
      * @param name キー
      * @param format データのファσマット
      * @param data データ値
      */
     public void addData(String name,Format format,Object data){
      point.put(name, this.data.length-1);
      addByte(ByteCast.toByte(name));
      addByte(ByteCast.toByte("・"));
      addByte(format.getFormat());
      addByte(ByteCast.toByte("・"));
      switch(format){
      case Entry:
       break;
      case Int:
       addByte(ByteCast.toByte((int)data));
       break;
      case String:
       addByte(ByteCast.toByte((String)data));
       break;
      case Byte:
       addByte((Byte) data);
       break;
      case Byte255:
       addByte((Byte) data);
       break;
      }
      addByte(ByteCast.toByte("¶\n"));
     }
    
    はい、って、おっとっと
    フォーマットにenum配列つかってます(笑)
    そっち解説は...URLはっと来ますね(笑)

    package bytedata.rbd;
    
    
    
    
    /**
     * formatの宣言
     * @author Raiti
     * @version 1.0.0
     *
     */
    public enum Format {
     Entry(0),
     Int(1),
     String(2),
     Byte(3),
     Byte255(4),
     ;
    
    
     private byte FORMAT;
    
    
     private Format(int format) {
      FORMAT = (byte) format;
     }
    	
     public byte getFormat(){
      return FORMAT;
     }
    
    
     public static Format getEnum(int num) {
      Format[] format = Format.values();
    
    
      for (Format enumInt : format) {
       if(num == enumInt.getFormat()){
        return enumInt;
       }
      }
      return null;
     }
    }
    
    
    
    enumは、はっきり言って配列に値を付けただけです
    enumはここの解説を見てね

    では、上のはなにをやっているかと言うと
    まず
    point.put(......)ってところはスルーして下さい(笑)
    ここは今後触れていくので
    で、addByteとは前回のつくったメソッドです。
    あ、ちなみにそれの派生としてbyte配列の格納できるメソッドも必要ですが、
    ここに来た方なら分かるでしょう(笑)
    受け取った配列をfor文で繰り返して全部入れればいいのですから(笑)
    で、
    あ...(ここで見たこともないByteCastクラスを使ってることに気づく)
    いや、モンダイナイデス...
    えっと...
    ByteCastとは、自分が作ったbyteとそのほかのデータを変換したりするstaticメソッドの集合体デス...
    文字列は簡単です

    pubric static byte[] toByte(String text){
     return text.getBytes();
    }
    

    で、できますので で、見たら分かるように配列を返すので、その配列をそのまま格納します
    そして、次の行はデータの区切りを作ります
    この文字コードのデータ値が区切りになるわけです
    そして次がフォーマットデータの格納です。
    フォーマット配列にはそれぞれに数値が付けてあるのでそれをそのままあと付けで格納
    そしてまた区切りを追加して そのあとがモンダイです
    switch文はググッテクダサイ で、Entryは、まだ実装してないので...(;´Д`)ノ
    ま、まあ Stringは、問題ないですよね?
     byteも、 byte255は、格納は何も変わりませんし
     じゃ、Intは?
    はい...
    これが問題です
    ここで説明すると尺が持たないので割愛で...
    ソースは最後に乗せておくので
    いつか説明します
    いつか...(゚ー゚;

    で、まあIntはint数値をbyte配列に変換させて格納してるだけです。

    そして最後にまた文字列データをしまって居ますが
    これはここで1つのデータが終わったよって言う目印です

    はい、ということでNFDデータの格納ができましたね

    では、また次回
    ではではー(。・ω・)ノ゙


     /**
      * int形数値をbyte配列に変換します
      * @param data
      * @return
      */
     public static byte[] toByte(int data){
      int dataa = data;
      byte[] datasX = new byte[1];
      byte[] Buffer;
      int datab;
      for(int i = 0;;i++){
       datab = dataa/256;
       
       if (datab==0){
        datasX[i]=(byte)Math.IEEEremainder(dataa,256);
        break;
       }
       
       datasX[i] = (byte)Math.IEEEremainder(dataa, 256);
       dataa  = datab;
       
       Buffer = new byte[datasX.length];
       System.arraycopy(datasX, 0, Buffer, 0, datasX.length);
       datasX = new byte[Buffer.length+1];
       System.arraycopy(Buffer, 0, datasX, 0, Buffer.length);
       
      }
      
      byte[] datas = new byte[datasX.length];
      int index = datas.length-1;
      for(int i = 0 ; i < datas.length ; i++){
       datas[i] = datasX[index];
       index--;
      }
      
      return datas;
     }