report9d

          2009年6月22日 #

          特大喜訊: 簡(jiǎn)表(JOR),國(guó)內(nèi)唯一開(kāi)源的java報(bào)表工具隆重啟航!

          簡(jiǎn)表(JOR),是一款開(kāi)源的報(bào)表工具,完全java實(shí)現(xiàn),核心代碼來(lái)自于國(guó)內(nèi)一線報(bào)表工具品牌杰表.2008 。

          提起開(kāi)源的報(bào)表工具,不能不說(shuō)說(shuō)jaspereport,jasperreport作為著名的開(kāi)源報(bào)表工具,在java程序員中一直享有盛名。但由于其設(shè)計(jì)主要是針對(duì)西式的簡(jiǎn)單報(bào)表,設(shè)計(jì)起復(fù)雜的中式報(bào)表來(lái),有點(diǎn)力不從心,所以,在國(guó)內(nèi)的項(xiàng)目中能成功應(yīng)用的例子并不多。JOR,作為能做復(fù)雜報(bào)表的開(kāi)源報(bào)表工具,可以彌補(bǔ)jasperreport的不足。

          下載地址:

          http://www.jatools.com/jor

          posted @ 2009-10-15 16:09 report9d 閱讀(350) | 評(píng)論 (0)編輯 收藏

          原創(chuàng)olap引擎,純java實(shí)現(xiàn)的

          java實(shí)現(xiàn)的olap服務(wù)器,完全自主產(chǎn)權(quán),純java實(shí)現(xiàn). cube架構(gòu),性能優(yōu),占用空間小.


           

          分析模型設(shè)計(jì)器

           


          posted @ 2009-09-25 18:47 report9d 閱讀(379) | 評(píng)論 (0)編輯 收藏

          換個(gè)角度來(lái)曬曬杰表.2008

          閑話少說(shuō),曬幾個(gè)杰表.2008的ppt截圖,希望有助于大家對(duì)報(bào)表工具的選擇.













           


          posted @ 2009-09-02 13:02 report9d 閱讀(959) | 評(píng)論 (0)編輯 收藏

          jni 學(xué)習(xí)筆記一(原創(chuàng))

          jni 類(lèi)型

          簡(jiǎn)單類(lèi)型 primitive type

          jni有8大基本類(lèi)型, jboolean,jbyte,jchar,jshort,jint,jfloat,jlong,,jdouble
          8位,16位,32位,64位,各兩個(gè)(在win32平臺(tái)中,其他平臺(tái)不一定)

          java類(lèi)型與c++數(shù)據(jù)類(lèi)型的映射關(guān)系是如下:
          jboolean <--> unsigned char
          jchar   <--> unsigned short
          jshort  <--> short
          jfloat  <-->  float
          jdouble <--> double

          這是在 jni.h里定義的,為啥缺了jbyte,jint,jlong的映射呢?
          答案是:sun在實(shí)現(xiàn)java虛擬機(jī)時(shí),考慮到虛擬機(jī)可能運(yùn)行在不同的操作系統(tǒng)和不同的硬件平臺(tái)上,比如,硬件平臺(tái)有8位,16位,32位,64位的區(qū)別,為了更好地與硬件平臺(tái)匹配,發(fā)揮最好的性能,將一些類(lèi)型抽取出來(lái),允許在不同的平臺(tái)上有不同的表示(位數(shù)),我們姑且稱(chēng)之為硬件相關(guān)類(lèi)型,jbyte,jint,jlong就屬于硬件相關(guān)類(lèi)型。

          舉列來(lái)說(shuō),如果你在32位機(jī)上,jint表示的是32bit的,而在64位機(jī)上,一般是64位即8個(gè)字節(jié)表示,也就是說(shuō),jbyte,jint,jlong在sun的虛擬機(jī)上,位數(shù)是不定的。

          那位數(shù)不一定,怎么編譯?   sun的方法是增加一個(gè)機(jī)器相關(guān)的jni_md.h文件,這里的md是machine dependent(機(jī)器相關(guān))的意思。在win32平臺(tái)中,這三個(gè)類(lèi)型的定義如下:

          typedef long jint;
          typedef __int64 jlong;
          typedef signed char jbyte;

          由此可見(jiàn),在win32平臺(tái)中,jint是32位的,jlong是64位,jbyte是8位的.

          指針類(lèi)型  reference type
          reference 準(zhǔn)確的譯法,應(yīng)該是引用,但引用實(shí)際上就是指針的一種偽裝,只不過(guò)更接近人的思維罷了。如果說(shuō),"爸爸的爸爸"是一種指針概念,那"爺爺"就是一種引用概念。

          jni把類(lèi)型分為兩大類(lèi),一個(gè)是簡(jiǎn)單類(lèi)型,一個(gè)是引用類(lèi)型,下面是引用類(lèi)型



          從上圖似乎可以看出,所有引用類(lèi)型,都從jobject 繼承,jarray又被幾個(gè)簡(jiǎn)單類(lèi)型的數(shù)組繼承.
          但實(shí)際上這個(gè)對(duì)象層次,是一種假象,跟我們c++與java中看到的對(duì)象層次是有區(qū)別的,jobject與LPSTR(字符串指針),本質(zhì)上沒(méi)有區(qū)別:
          1.  jobject, jclass,jstring,...等,所有對(duì)象,是指針,不是對(duì)象本身,而指針是不存在繼承關(guān)系的,“小狗”的指針,從“動(dòng)物”的指針繼承,這種說(shuō)法不成立。
          2. jobject,jclass,jstring 是一種指針,不存在任何操作方法,好比你不能 LPCSTR->strlen(),在jni中,也沒(méi)有提供任何  jobject->something() 這種調(diào)用。
          3. 對(duì)這些對(duì)象的操作必須依賴于 env對(duì)象的操作方法.

          看一下,jni.h中對(duì) 這些引用對(duì)象的定義

          class _jobject {};
          class _jclass : public _jobject {};
          class _jstring : public _jobject {};
          ...
          typedef _jobject *jobject;     //_jobject才是類(lèi)定義,jobject 是否_jobject的指針
          typedef _jclass *jclass;
          typedef _jstring *jstring;
          ...

          在這些下劃線對(duì)象中,有什么成員變量,成員函數(shù)呢? 答案是你什么也不能得到,比如,你想知道,_jstring對(duì)象的字符串長(zhǎng)度,你不能 _jstring.length(),得到,而必須env->GetStringLength(jstring) 來(lái)得到.

          只給你一個(gè)對(duì)象的指針,不告訴你里面有什么,這樣做的好處是實(shí)現(xiàn)與接口分離。

          jvalue 這個(gè)類(lèi)型,是一個(gè)union ,感覺(jué)很想com里的variant對(duì)象,不過(guò)沒(méi)有指明類(lèi)型的field
           typedef union jvalue {
              jboolean z;
              jbyte    b;
              jchar    c;
              jshort   s;
              jint     i;
              jlong    j;
              jfloat   f;
              jdouble  d;
              jobject  l;
          } jvalue;
          我現(xiàn)在還不知道,這個(gè)數(shù)據(jù)類(lèi)型,什么時(shí)候用.

          jfieldID是一個(gè)java類(lèi)成員變量的id,這個(gè)id在c++中,實(shí)際是一個(gè)指向結(jié)構(gòu)的一個(gè)指針, jmethodID  是成員方法的id,  不管是成員變量還是方法的id,在java類(lèi)被加載進(jìn)虛擬機(jī)后,是保持不變的。所以從考慮性能計(jì),可以使用靜態(tài)緩存的方法,先取出來(lái),后面會(huì)講到

          字符串類(lèi)型
          這里說(shuō)的字符串類(lèi)型,是jni中char * 的格式,不是指 jstring/_jstring,jni也使用 char * 字符串指針,
          好下所示:
              jmethodID GetMethodID (JNIEnv *env, jclass clazz, const char *name, const char *sig);

          但需要注意的是,這里的name,必須是UTF-8的編碼,utf-8對(duì)于ascii字符,只占一個(gè)字節(jié),最多不超過(guò)3個(gè)字節(jié)

          posted @ 2009-06-22 10:12 report9d 閱讀(2285) | 評(píng)論 (1)編輯 收藏

          主站蜘蛛池模板: 共和县| 寿宁县| 鹿邑县| 玉屏| 内江市| 南充市| 金湖县| 西和县| 时尚| 资中县| 四平市| 盐城市| 云安县| 嘉禾县| 临沭县| 莱西市| 河南省| 正镶白旗| 普兰店市| 铁岭县| 理塘县| 天门市| 清水河县| 家居| 靖州| 临武县| 怀来县| 会泽县| 兴和县| 罗田县| 大同市| 禹州市| 图木舒克市| 山西省| 万安县| 宁乡县| 永胜县| 抚宁县| 靖江市| 饶河县| 阜宁县|