国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 學(xué)院 > 開發(fā)設(shè)計(jì) > 正文

腳本引擎之----讀取INI配置文件

2019-11-18 16:11:39
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

為什么要使用J2ME來(lái)讀取INI(配置)文件呢?在單機(jī)版游戲當(dāng)中,使用INI文件來(lái)讀取相關(guān)命令實(shí)屬多余,但是在編寫網(wǎng)絡(luò)游戲時(shí),由客戶端讀取從服務(wù)器傳來(lái)的INI文件流就顯得相當(dāng)重要了。因?yàn)槭謾C(jī)游戲客戶端是寫死的程序,不可能實(shí)現(xiàn)像PC網(wǎng)絡(luò)游戲那樣進(jìn)行下載客戶端的升級(jí)。

因此,將一些經(jīng)常需要改動(dòng)的游戲元素,如:NPC屬性,地圖屬性等保存到服務(wù)器端,在改動(dòng)的時(shí)候只需要簡(jiǎn)單地改變服務(wù)器端保存的INI文件內(nèi)容即可,而手機(jī)客戶端只需要解析由服務(wù)器傳過(guò)來(lái)的INI文件流。

import java.io.*;

import java.util.*;

 

public class ConfigFile

{

  PRivate String sCon;

  private String str = null;

  //構(gòu)造函數(shù)

  public ConfigFile()

  {

  }

 

  /**

   * 功能: 讀取文件數(shù)據(jù)

   * @param sFile String INI文件名

   * @param sIndex String []中的內(nèi)容

   * @param sContent String 內(nèi)容索引

   * @return String 內(nèi)容索引的值(String)

   * @throws IOException

   */

  public String readFile(String sFile, String sIndex, String sContent) throws

      IOException

  {

    InputStream input;

    Vector v1 = new Vector(); //sIndex的值

    Vector v2 = new Vector(); //sContent的值

    int p, q, l = 0, i; //保存各字符的索引

    String argIndex1 = ""; //中間值

    String num1 = ""; //中間值

    input = getClass().getResourceAsStream(sFile);

    str = this.asciiToUTF(input);

    //將全部字符串分別保存到兩個(gè)String對(duì)象中

    String strOne = str;

    //功能:將流中"["和"]"中的內(nèi)容全部取出并存放到Vector中

    //(char)91和(char)93分別返回"["和"]"

    while ((p = str.indexOf("[")) != -1 &&

           (q = str.indexOf("]")) != -1)

    {

      //num1=str.substring(p+1,q);

      v1.addElement(str.substring(p + 1, q));

      str = str.substring(q + 1);

    }

    //讀取sIndex下的索引內(nèi)容

    //i循環(huán)實(shí)現(xiàn)遍歷所有"["和"]"中的內(nèi)容

    for (i = 0; i < v1.size(); i++)

    {

      //檢查所遍歷的數(shù)據(jù)是否等于參數(shù)sIndex的值

      if (v1.elementAt(i).equals(sIndex) == true)

      {

        //strOne.indexOf(sIndex)得到全部數(shù)據(jù)中第一個(gè)sIndex的索引值

        //+sIndex.length()后,得到sIndex最后一個(gè)字節(jié)的索引值

        //+2后,去除字符"]"和回車符,但保留換行符

        //利用substring將換行符前的字符全部刪除并保存到argIndex1中

        argIndex1 = strOne.substring(strOne.indexOf(sIndex) + sIndex.length() +

                                     2);

        if ((p = argIndex1.indexOf("[")) != -1)

        {

          //從新字符串的第一個(gè)字節(jié)開始,讀到"["的前兩個(gè)字節(jié)為止,即回車符

          num1 = argIndex1.substring(0, p - 1);

          //r返回?fù)Q行符的索引值,s返回"="號(hào)的索引值,l返回回車符的索引值

          while ((p = num1.indexOf((char)10)) != -1 &&

                 (q = num1.indexOf("=")) != -1 &&

                 (l = num1.indexOf((char)13)) != -1)

          {

            //從換行符后的第一個(gè)字節(jié)開始讀取直到"="前面的字節(jié)為止

            //num3=num1.substring(r+1,s);

            v2.addElement(num1.substring(p + 1, q));

            //截取從換行符開始到后面的所有字符的新字符串

            num1 = num1.substring(l + 1);

          }

          //讀取sContent下的內(nèi)容

          //v2.size()返回當(dāng)前[]下的行數(shù)

          for (i = 0; i < v2.size(); i++)

          {

            //檢查所遍歷的數(shù)據(jù)是否等于參數(shù)sContent的值

            if (v2.elementAt(i).equals(sContent) == true)

            {

              //strTwo.indexOf(sContent)找出sContent的索引

              //+sContent.length()返回sContent最后一個(gè)字符的索引值

              //獲得之后所有字符組成新的字符集

              num1 = argIndex1.substring(argIndex1.indexOf(sContent) +

                                         sContent.length());

              if ((p = num1.indexOf("=")) != -1 &&

                  (q = num1.indexOf((char)13)) != -1)

              {

                //截取"="后面和回車符前的字符串

                sCon = num1.substring(p + 1, q);

              }

            }

          }

        }

        break;

      }

    }

    return sCon;

  }

 

  //注意這個(gè)地方很重要,這里是轉(zhuǎn)換中文的處理。如果沒(méi)有

  //這個(gè)函數(shù),如果文件中包含中文將不能正確執(zhí)行

  private String asciiToUTF(InputStream inputStream)

  {

    byte[] myData = null;

    String strData = null;

    try

    {

      ByteArrayOutputStream byteArray = new ByteArrayOutputStream();

      int ch = 0;

      while ((ch = inputStream.read()) != -1)

      {

        byteArray.write(ch);

      }

      //將byteArray中的字節(jié)全部輸入到myData中

      //byteArray.size()為字節(jié)長(zhǎng)度

      for (int i = 0; i < byteArray.size(); i++)

      {

        myData = byteArray.toByteArray();

      }

      strData = new String(myData, "UTF-8");

    }

    catch (Exception e)

    {}

    return strData;

  }

}

可以讀取的文件示例:

npc.ini

---------------------------

[1]

name=許偉東

sex=男

[]

 

當(dāng)然,這只是實(shí)現(xiàn)在J2ME中腳本引擎的第一步,后面的我會(huì)慢慢寫。

同時(shí),我已經(jīng)將需要注意的地方寫了注釋,如果您對(duì)這方面很感興趣,可以聯(lián)系我。


E-mail:weidongxu@vip.sina.com   QQ:70705327
blog :  http:www.sf.org.cn/blog/xuweidong/index.Html

(出處:http://m.survivalescaperooms.com)



發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 岑巩县| 临潭县| 多伦县| 抚松县| 肇州县| 古交市| 米脂县| 万安县| 沭阳县| 科技| 吉安县| 琼海市| 玛多县| 安吉县| 庆云县| 绍兴县| 宽甸| 奎屯市| 新邵县| 石楼县| 共和县| 新余市| 加查县| 彭泽县| 玉林市| 临漳县| 浏阳市| 馆陶县| 建德市| 大丰市| 赣榆县| 农安县| 嘉定区| 石景山区| 锦屏县| 海安县| 济阳县| 镇康县| 中超| 平邑县| 晴隆县|