blogjava-凯发k8网页登录

blogjava-凯发k8网页登录http://www.blogjava.net/hwpok/category/27105.htmldebug - 天道酬勤zh-cnfri, 01 sep 2017 21:05:45 gmtfri, 01 sep 2017 21:05:45 gmt60pp代码生成器(四) 使用凯发天生赢家一触即发官网的解决方案生成代码http://www.blogjava.net/hwpok/archive/2017/09/01/432793.htmlhuikkhuikkfri, 01 sep 2017 12:20:00 gmthttp://www.blogjava.net/hwpok/archive/2017/09/01/432793.htmlhttp://www.blogjava.net/hwpok/comments/432793.htmlhttp://www.blogjava.net/hwpok/archive/2017/09/01/432793.html#feedback0http://www.blogjava.net/hwpok/comments/commentrss/432793.htmlhttp://www.blogjava.net/hwpok/services/trackbacks/432793.html这一节我们探讨, 如何使用凯发天生赢家一触即发官网的解决方案结合数据生成代码
点击”选择目标表” 标签, 在数据源所在行点击添加, 添加需要的数据源, 这步比较简单, 添加后, 一定要点击一下测试, 看是否能连接到数据.

然后点击查找, 就会看到当前里的表, 界面如下: 

选中某一个表, 或几个, 点击生成, 我们的需要的代码就生成了. 
这时回到我们的eclipse的相应目录下, 按一下f5刷新, 我们所选的表的po文件已经生成了.



huikk 2017-09-01 20:20 发表评论
]]>
pp代码生成器(三) 设计freemarker模板, 创建凯发天生赢家一触即发官网的解决方案http://www.blogjava.net/hwpok/archive/2017/09/01/432791.htmlhuikkhuikkfri, 01 sep 2017 12:19:00 gmthttp://www.blogjava.net/hwpok/archive/2017/09/01/432791.htmlhttp://www.blogjava.net/hwpok/comments/432791.htmlhttp://www.blogjava.net/hwpok/archive/2017/09/01/432791.html#feedback0http://www.blogjava.net/hwpok/comments/commentrss/432791.htmlhttp://www.blogjava.net/hwpok/services/trackbacks/432791.html
这一节, 我们根据数据库生成po对象为例, 来探讨如何使用pp制作freemarker模板, 创建凯发天生赢家一触即发官网的解决方案. 工料:
  1. eclipse jee, 最好是安装freemarker插件, 可以高亮显示freemarker标签.
  2. 可用的数据库, 可以是mysql, oracle, db2, postgresql中的任意一种. 如果没有数据库, 使用pp_home中的sample/sample-mysql.xlsx也是可以的.
* pp支持两种数据源, 一种是数据库, 另一种是excel文件数据源. 为什么支持excel呢? 是源于我曾经在建行工作, 内部数据库权限管理极为严格. 以至于pp需要查表字段信息的sql无权访问oracle的user_tab_columns等表, 这种情况下, 可以把表信息录入到excel, 继续使用pp来生成代码.
制作freemarker文件模板
再次提示, 点击pp的”工具”->”辅助设计” 菜单可以打开”辅助设计面板”, 需要的变量都可以到里面复制, 然后粘贴到freemarker中.
以下是我在eclipse里写的freemarker文件po.flt
 <#-- 生成package信息 --> <#if p.popackagename??>package ${p.popackagename}; <#-- 生成import信息 --> <#list g.entityimportclassset as clazz> import ${clazz};  /** *description: ${g.tablecomment}[${g.tablename}]管理接口实现类 
*create info: ${c.author}, ${g.createtime?string("yyyy/mm/dd")}
*凯发天生赢家一触即发官网 copyright (c) ${g.createtime?string("yyyy")}, ${c.contact} all rights reserved.
* *@version 1.0 */ public class ${g.entitycap}po { <#-- 生成主键字段信息 --> <#list g.fieldlst as f> private ${f.javatypeshort} ${f.property}; <#if f.columncomment??>// ${f.columncomment}<#if f.ispk>,主键<#if !f.isnullable>,不能为空 <#-- 生成不带参数的构造方法 --> /** *不带参数的构造方法 */ public ${g.entitycap}po(){} <#-- 生成以主键为参数的构造方法 --> /** *主键作为参数的构造方法 *@param ${g.pkfield.property} <#if g.pkfield.columncomment??>${g.pkfield.columncomment} */ public ${g.entitycap}po(${g.pkfield.javatypeshort} ${g.pkfield.property}){ this.${g.pkfield.property} = ${g.pkfield.property}; } <#-- 生成主键set/get方法 --> <#list g.fieldlst as f> /** *getter <#if f.columncomment??>${f.columncomment}<#if f.ispk>,主键<#if !f.isnullable>,不能为空 *@return */ public ${f.javatypeshort} get${f.propertycap}(){ return this.${f.property}; } /** *setter <#if f.columncomment??>${f.columncomment}<#if f.ispk>,主键<#if !f.isnullable>,不能为空 *@param ${f.property} */ public void set${f.propertycap}(${f.javatypeshort} ${f.property}){ this.${f.property} = ${f.property}; } }
在eclipse里编辑好这个文件后, 在pp_home/config/templates里创建myscheme文件夹, 然后把po.flt复制到这个文件夹中. 到这步为止, 我们模板就制作完了.
下面我们开始创建凯发天生赢家一触即发官网的解决方案

打开pp后, 请按如下步骤操作,

  1. 点击”可写”按钮, 使这个标签页上的控件呈可编辑状态
  2. 在”解析方案”可编辑下拉框中填写”myscheme”
  3. 在”域名”文件框里填入”com.hwp.pro”, 这里是您的项目的包前缀, 鼠标在上面停留, 可以看到提示, 可以通过${domain}在freemarker中引用它的值.
  4. 在”模块”里输入”pub”, 我们要生成文件的模块名, 鼠标在上面停留, 可以看到相应的提示
  5. “基本url”不用填写, 生成controller, html时才可能会用到
  6. 在”基本路径”里输入”/uers/hui/documents/myspace/workspaces1/workspacepp/generator-test/src/main” 这是我们项目文件的路径, 最终生成文件的保存路径会和它有关系. 具体关系是生成的文件的最终保存路径是 “基本路径” “包名”的路径.
  7. 点击”添加或修改”, 此时, 凯发天生赢家一触即发官网的解决方案就保存好了.
下面我们开始为”凯发天生赢家一触即发官网的解决方案” 添加 “生成任务”, 请按如下步骤操作:

选中刚才的创建的凯发天生赢家一触即发官网的解决方案, 点击”任务列表” 下面的 “添加”, 在弹出界面中输入如下信息
##### 在这个面板中作以下几点说明: 
1. 模板路径${templatespath}会被pp_home//comfig//templates替换. 
2. 存放路径最终的结果是前面的”基本路径” “” ”包名(转化成路径)” 
3. 包名后面的文本框的值, 是包名的别名, 在freemarker文件中可以通过${p.popackagename}去引用

这进下任务列表里已经有了这个任务, 如图: 

上面的这些信息, 会保存在pp的sqlite数据库, 以备下次使用.
下面一篇博客, 我们探讨, 如何用凯发天生赢家一触即发官网的解决方案来结合数据库表来生成文件




huikk 2017-09-01 20:19 发表评论
]]>
pp代码生成器(二) 凯发天生赢家一触即发官网的解决方案, 生成任务, 辅助设计面板http://www.blogjava.net/hwpok/archive/2017/09/01/432790.htmlhuikkhuikkfri, 01 sep 2017 12:17:00 gmthttp://www.blogjava.net/hwpok/archive/2017/09/01/432790.htmlhttp://www.blogjava.net/hwpok/comments/432790.htmlhttp://www.blogjava.net/hwpok/archive/2017/09/01/432790.html#feedback0http://www.blogjava.net/hwpok/comments/commentrss/432790.htmlhttp://www.blogjava.net/hwpok/services/trackbacks/432790.html我们接着上一篇博客继续讨论如何使用pp生成代码.
首先, 我们介绍两个概念”凯发天生赢家一触即发官网的解决方案”和 “生成任务”.
  1. 凯发天生赢家一触即发官网的解决方案: 凯发天生赢家一触即发官网的解决方案是一系列生成任务的集合. 它包含若干个生成任务.
  2. 生成任务: 每个任务会关联一个freemarker模板, 最终会使用这个模板来生成一个结果文件
凯发天生赢家一触即发官网的解决方案和任务的关系如下图:
在上一篇博客中, 我们知道了pp是基于freemarker模板的, pp遵循着 “数据模型” “模板” = “最终文件” 这种基本的规则;
使用pp, “数据模型” 不需要我们关心, pp已经为我们内置了. 通过菜单”工具”->”辅助设计” 可以轻松地使用模板变量来制作我们的freemaker模板.
使用pp, “模板”是需要我们自己来编写制作. 可以打开辅助设计, 选中需要使用的变量, 粘贴到freemarker模板中.
下面我们着重介绍一下辅助设计面板, 先上图:
在这个面板里, 变量有4个分类:
  1. 全局: 是数据库相关的, 表相关的信息, 通过${g.x}引用
  2. 领域: 是数据库表字段相关的信息, 通过${f.x}引用
  3. 路径: 是创建”生成任务”时的路径引用, 通过${x}引用
  4. 自定义: 是用户自定义的信息, 如代码作者, 公司, 凯发天生赢家一触即发官网的联系方式等, 通过${c.x}引用
这些变量都有注释说明, 有几年程序经验的猿猿应该一看就能明白.
一点小技巧, 要复制这些变量, 只需要选中, 然后粘贴到freemarker模板中


huikk 2017-09-01 20:17 发表评论
]]>
pp代码生成器(一) 简介, 下载, 运行http://www.blogjava.net/hwpok/archive/2017/09/01/432789.htmlhuikkhuikkfri, 01 sep 2017 12:16:00 gmthttp://www.blogjava.net/hwpok/archive/2017/09/01/432789.htmlhttp://www.blogjava.net/hwpok/comments/432789.htmlhttp://www.blogjava.net/hwpok/archive/2017/09/01/432789.html#feedback0http://www.blogjava.net/hwpok/comments/commentrss/432789.htmlhttp://www.blogjava.net/hwpok/services/trackbacks/432789.html今天, 向大家推荐一款代码生成利器—-pp代码生成器(后文简称为pp, 注意哦, 是读朋朋, 不是皮皮哈.).

pp是基于freemarker模板, 在freemarker的世界里, 数据模型 模板文件 = 生成结果. pp也遵循着这条基本原则, 其基本设计原理如下图.

下载pp  ,  , 然后解压到您喜欢的目录. 为了以后使用方便, 请作如下操作:

如果您是windows系统, 进工具的目录, 请把pp-generator-0.0.5/bin/run-gui.bat发送到桌面,生成快捷方式, 以后要运行代码生成器, 双击即可.

如果您是mac os或ubuntu os, 先打开终端, 执行 chmod x pp-generator-0.0.5/bin/run-gui.sh, 为这个sh文件增加可执行权限, 然后在终终执行: vi ~/.bash_profile, 并在其中加入: alias ppstart=’/users/hui/documents/mystudio/software/pp-generator-0.0.5/bin/run-gui.sh’, 以后要运行代码生成器, 在终端里输入ppstart就可以了.

本工具运行的前提条件是电脑已装java运行时. 下面是我运行pp后的截图:

下一篇博客我们继续介绍pp的架构原理和如何使用pp生成代码.


huikk 2017-09-01 20:16 发表评论
]]>
pp持久层代码生成器http://www.blogjava.net/hwpok/archive/2016/10/11/431880.htmlhuikkhuikktue, 11 oct 2016 00:03:00 gmthttp://www.blogjava.net/hwpok/archive/2016/10/11/431880.htmlhttp://www.blogjava.net/hwpok/comments/431880.htmlhttp://www.blogjava.net/hwpok/archive/2016/10/11/431880.html#feedback0http://www.blogjava.net/hwpok/comments/commentrss/431880.htmlhttp://www.blogjava.net/hwpok/services/trackbacks/431880.html本人开发的基于freemarker引擎的持久层代码生成器, 希望给大家的编码生活带来便利.
下载地址: http://download.csdn.net/detail/hwpok/9650218

huikk 2016-10-11 08:03 发表评论
]]>
eclipse mavenhttp://www.blogjava.net/hwpok/archive/2014/08/19/417120.htmlhuikkhuikktue, 19 aug 2014 11:33:00 gmthttp://www.blogjava.net/hwpok/archive/2014/08/19/417120.htmlhttp://www.blogjava.net/hwpok/comments/417120.htmlhttp://www.blogjava.net/hwpok/archive/2014/08/19/417120.html#feedback0http://www.blogjava.net/hwpok/comments/commentrss/417120.htmlhttp://www.blogjava.net/hwpok/services/trackbacks/417120.html转自:

maven 让您的构建不是一般的爽,下面就看看怎么样让maven工作起来。

 

第一步,做好安装maven前的准备工作,首先安装jdk5或者jdk6.这一步比较简单,学java的同学应该都会,不罗嗦了,检验jdk是否安装好,可以输入如下命令后回车(windows系统)

 

 

第二步,下载maven并进行安装,maven下载地址 ,本文下载的是 。下载后解压至当前目录,我的解压地址d:/apache-maven-2.2.0-bin

设置两个比较重要的环境变量。

 

[c-sharp]
  1. m2_home= d:/apache-maven-2.2.0-bin/apache-maven-2.2.0  
  2.   
  3. path=%path%;%m2_home%/bin  
  

 

 

验证你的安装是否正确,则在cmd 下输入 mvn –v .如果出现maven的版本信息,则表示安装成功,否则,仔细检查你的环境变量设置是否正确。

 

安装后maven的目录结构如下:

 

bin目录包含了运行maven的mvn脚本。 boot目录包含了一个负责创建maven运行所需要的类装载器的jar文件。 conf目录包含了一个全局的settings.xml文件,该文件用来自定义你机器上maven的一些行为。如果需要自定义maven,更通常的做法是覆写 %home%/.m2目录下的settings.xml文件,每个用户都有对应的这个目录。lib目录有了一个包含maven核心的jar文件。 另外,默认情况下,maven会将本地仓库存贮在%home%/.m2/repository/下,当你从远程maven仓库下载依赖的时候,maven在你本地仓库存储了这个依赖的一个副本,如果你要改变这个位置,那么你得修改settings.xml文件。例如将路径修改到d盘 ,则修改节点 d:/repository,设置后别忘了设置环境变量 m2_repo= d:/repository .

第三步、创建一个简单web 项目玩玩。

     cmd 下,键入命令

 

[c-sharp]
  1. mvn archetype:create -dgroupid=com.taobao.maven -dartifactid=maven-webapp -dpackagename=com.taobao.maven.web -darchetypeartifactid=maven-archetype-webapp  

 

 

执行命令后显示信息如下:

 

[c-sharp]
  1. [info] scanning for projects...  
  2.   
  3. [info] searching repository for plugin with prefix: 'archetype'.  
  4.   
  5. [info] artifact org.apache.maven.plugins:maven-archetype-plugin: checking for updates from central  
  6.   
  7. downloading: http://repo1.maven.org/maven2/org/apache/maven/plugins/maven-archetype-plugin/2.0-alpha-4/maven-archetype-plugin-2.0-alpha-4.po   
  8.   
  9.    
  10.   
  11. downloading: http://repo1.maven.org/maven2/org/apache/maven/archetype/maven-archetype/2.0-alpha-4/maven-archetype-2.0-alpha-4.pom   
  12.   
  13.    
  14.   
  15. downloading: http://repo1.maven.org/maven2/org/apache/maven/plugins/maven-archetype-plugin/2.0-alpha-4/maven-archetype-plugin-2.0-alpha-4.ja   
  16.   
  17.    
  18.   
  19. [info] ------------------------------------------------------------------------  
  20.   
  21. [info] building maven default project  
  22.   
  23. [info]    task-segment: [archetype:create] (aggregator-style)  
  24.   
  25. [info] ------------------------------------------------------------------------  
  26.   
  27. downloading: http://repo1.maven.org/maven2/org/apache/maven/archetype/archetype-common/2.0-alpha-4/archetype-common-2.0-alpha-4.pom   
  28.   
  29.    
  30.   
  31. downloading: http://repo1.maven.org/maven2/org/apache/maven/wagon/wagon-file/1.0-alpha-6/wagon-file-1.0-alpha-6.pom   
  32.   
  33.    
  34.   
  35. downloading: http://repo1.maven.org/maven2/org/apache/maven/wagon/wagon-providers/1.0-alpha-6/wagon-providers-1.0-alpha-6.pom   
  36.   
  37.    
  38.   
  39. downloading: http://repo1.maven.org/maven2/net/sourceforge/jchardet/jchardet/1.0/jchardet-1.0.pom   
  40.   
  41.    
  42.   
  43. downloading: http://repo1.maven.org/maven2/dom4j/dom4j/1.6.1/dom4j-1.6.1.pom   
  44.   
  45.    
  46.   
  47. downloading: http://repo1.maven.org/maven2/commons-io/commons-io/1.3.1/commons-io-1.3.1.pom   
  48.   
  49.    
  50.   
  51. downloading: http://repo1.maven.org/maven2/org/apache/maven/shared/maven-invoker/2.0.6/maven-invoker-2.0.6.pom   
  52.   
  53.    
  54.   
  55. downloading: http://repo1.maven.org/maven2/org/apache/maven/archetype/archetype-common/2.0-alpha-4/archetype-common-2.0-alpha-4.jar   
  56.   
  57. downloading: http://repo1.maven.org/maven2/commons-io/commons-io/1.3.1/commons-io-1.3.1.jar   
  58.   
  59. downloading: http://repo1.maven.org/maven2/net/sourceforge/jchardet/jchardet/1.0/jchardet-1.0.jar   
  60.   
  61. downloading: http://repo1.maven.org/maven2/org/apache/maven/shared/maven-invoker/2.0.6/maven-invoker-2.0.6.jar   
  62.   
  63. downloading: http://repo1.maven.org/maven2/dom4j/dom4j/1.6.1/dom4j-1.6.1.jar   
  64.   
  65. [info] setting property: classpath.resource.loader.class => 'org.codehaus.plexus.velocity.contextclassloaderresourceloader'.  
  66.   
  67. [info] setting property: velocimacro.messages.on => 'false'.  
  68.   
  69. [info] setting property: resource.loader => 'classpath'.  
  70.   
  71. [info] setting property: resource.manager.logwhenfound => 'false'.  
  72.   
  73. [info] [archetype:create {execution: default-cli}]  
  74.   
  75. [warning] this goal is deprecated. please use mvn archetype:generate instead  
  76.   
  77. [info] artifact org.apache.maven.archetypes:maven-archetype-webapp: checking for updates from central  
  78.   
  79. downloading: http://repo1.maven.org/maven2/org/apache/maven/archetypes/maven-archetype-webapp/1.0/maven-archetype-webapp-1.0.jar   
  80.   
  81.    
  82.   
  83. [info] ----------------------------------------------------------------------------  
  84.   
  85. [info] using following parameters for creating oldarchetype: maven-archetype-webapp:release  
  86.   
  87. [info] ----------------------------------------------------------------------------  
  88.   
  89. [info] parameter: groupid, value: com.taobao.maven  
  90.   
  91. [info] parameter: packagename, value: com.taobao.maven.web  
  92.   
  93. [info] parameter: basedir, value: d:/workspace/branch  
  94.   
  95. [info] parameter: package, value: com.taobao.maven.web  
  96.   
  97. [info] parameter: version, value: 1.0-snapshot  
  98.   
  99. [info] parameter: artifactid, value: maven-webapp  
  100.   
  101. [info] ********************* end of debug info from resources from generated pom ***********************  
  102.   
  103. [info] oldarchetype created in dir: d:/workspace/branch/maven-webapp  
  104.   
  105. [info] ------------------------------------------------------------------------  
  106.   
  107. [info] build successful  
  108.   
  109. [info] ------------------------------------------------------------------------  
  110.   
  111. [info] total time: 26 seconds  
  112.   
  113. [info] finished at: wed dec 09 16:47:11 cst 2009  
  114.   
  115. [info] final memory: 8m/15m  
  116.   
  117. [info] ------------------------------------------------------------------------  

 

 

此时已经创建了一个web项目,你可以切换到maven-webapp目录看到目录结构。

 

 

 

可以看一下这个pom.xml的内容。

 

[xhtml]
  1.   
  2.   xsi:schemalocation="http://maven.apache.org/pom/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">  
  3.   
  4.   4.0.0  
  5.   
  6.   com.taobao.maven  
  7.   
  8.   maven-webapp  
  9.   
  10.   war  
  11.   
  12.   1.0-snapshot  
  13.   
  14.   maven-webapp maven webapp  
  15.   
  16.   http://maven.apache.org  
  17.   
  18.     
  19.   
  20.       
  21.   
  22.       junit  
  23.   
  24.       junit  
  25.   
  26.       3.8.1  
  27.   
  28.       test  
  29.   
  30.       
  31.   
  32.     
  33.   
  34.     
  35.   
  36.     maven-webapp  
  37.   
  38.     
  39.   
  40.   
  41.   
  42.    

 

 

packaging: 这里值为war,表示希望将该项目以war包形式打包,打包后将会在 target目录创建一个 war 文件,并以finalname为文件名创建名为maven-wepapp.war的包。

 

dependency:表示这里依赖了一个junitjar文件,只在测试阶段时才使用到。打包时并不会打到war包中去。

 

第四步、这个简单的web包中已经有了一个helloworld index.jsp文件,我们要做的就是将这个项目打包成war,然后放到web容器中去就可以看到效果了。

 

打包命令 mvn install, 如下:

 

 

target目录下已经存在了maven-webapp.war包,部署到tomcat等容器下后。

访问:

即可出现hello world 字样。

 

另外,maven提供了一个jettyweb容器插件,让我们可以不用自己去下载tomcat等容器,

但是需要在pom.xml配置jetty插件。

  
 
[xhtml]
  1.   
  2.     maven-webapp  
  3.       
  4.         
  5.         org.mortbay.jetty  
  6.         maven-jetty-plugin  
  7.         
  8.       
  9.     
配置好后,可以启动jetty服务器。
mvn jetty:run
 
最后出现
[c-sharp]
  1. 2009-12-09 17:35:37.065:info::jetty-6.1.22  
  2. 2009-12-09 17:35:37.487:info::no transaction manager found - if your webapp requires one, please configure one.  
  3. 2009-12-09 17:35:40.049:info::started selectchannelconnector@0.0.0.0:8080  
  4. [info] started jetty server  
表示启动成功,访问url即可。
 
如果jetty无法启动,在settings.xml中,配置一下

[xhtml]
  1.   
  2.       
  3.     org.mortbay.jetty  
  4.     
 
即可解决问题。
 
 
小提示:
 
如果想在eclipse中使用工程,则在命令行中运行
 mvn eclipse:eclipse  即可生成eclipse工程所需的.project等文件。
 mvn eclipse:clean 则是将eclipse配置信息清除
 
 
如果要在eclipse中查看外部引入包的源代码等,则在命令行中键入
mvn dependency:sources 即可下载源代码,如果没有下载,请先执行命令 mvn clean ,后再下载

http://www.cnblogs.com/sunxucool/archive/2013/03/05/2944011.html


huikk 2014-08-19 19:33 发表评论
]]>
平衡二叉树,java实现http://www.blogjava.net/hwpok/archive/2014/07/12/415731.htmlhuikkhuikksat, 12 jul 2014 12:49:00 gmthttp://www.blogjava.net/hwpok/archive/2014/07/12/415731.htmlhttp://www.blogjava.net/hwpok/comments/415731.htmlhttp://www.blogjava.net/hwpok/archive/2014/07/12/415731.html#feedback0http://www.blogjava.net/hwpok/comments/commentrss/415731.htmlhttp://www.blogjava.net/hwpok/services/trackbacks/415731.htmlpublic class mybinarytree{    private mynode root;// 根节点&...  

huikk 2014-07-12 20:49
]]>
数据结构复习http://www.blogjava.net/hwpok/archive/2014/07/12/415730.htmlhuikkhuikksat, 12 jul 2014 12:06:00 gmthttp://www.blogjava.net/hwpok/archive/2014/07/12/415730.htmlhttp://www.blogjava.net/hwpok/comments/415730.htmlhttp://www.blogjava.net/hwpok/archive/2014/07/12/415730.html#feedback0http://www.blogjava.net/hwpok/comments/commentrss/415730.htmlhttp://www.blogjava.net/hwpok/services/trackbacks/415730.html(1)前序遍历(dlr),首先访问根结点,然后遍历左子树,最后遍历右子树。简记根-左-右。

(2)中序遍历(ldr),首先遍历左子树,然后访问根结点,最后遍历右子树。简记左-根-右。

(3)后序遍历(lrd),首先遍历左子树,然后遍历右子树,最后访问根结点。简记左-右-根。 

  

例1:如上图所示的二叉树,若按前序遍历,则其输出序列为      。若按中序遍历,则其输出序列为      。若按后序遍历,则其输出序列为      。

前序:根a,a的左子树b,b的左子树没有,看右子树,为d,所以a-b-d。再来看a的右子树,根c,左子树e,e的左子树f,e的右子树g,g的左子树为h,没有了结束。连起来为c-e-f-g-h,最后结果为abdcefgh

中序:先访问根的左子树,b没有左子树,其有右子树d,d无左子树,下面访问树的根a,连起来是bda。

再访问根的右子树,c的左子树的左子树是f,f的根e,e的右子树有左子树是h,再从h出发找到g,到此c的左子树结束,找到根c,无右子树,结束。连起来是fehgc,  中序结果连起来是bdafehgc

后序:b无左子树,有右子树d,再到根b。再看右子树,最下面的左子树是f,其根的右子树的左子树是h,再到h的根g,再到g的根e,e的根c无右子树了,直接到c,这时再和b找它们其有的根a,所以连起来是dbfhgeca

例2:有下列二叉树,对此二叉树前序遍历的结果为(    )。

a)acbedgfh                                          b)abdgcehf

c)hgfedcba                                          d)abcdefgh

解析:先根a,左子树先根b,b无左子树,其右子树,先根d,在左子树g,连起来是abdg。 a的右子树,先根c,c左子树e,e无左子树,有右子树为h,c的右子树只有f,连起来是cehf。整个连起来是b答案 abdgcehf。

 

例3:已知二叉树后序遍历是dabec,中序遍历序列是debac,它的前序遍历序列是(       )  。

a)cedba  b)acbed c)decab d)deabc

解析:由后序遍历可知,c为根结点,由中序遍历可知,c左边的是左子树含deba,c右边无结点,知根结点无右子树。先序遍历先访问根c,答案中只有a以c开头,为正确答案。

 

例4:  如下二叉树中序遍历的结果是(  )。

 

a). acbdfeg  b). acbdfge  c).abdcgef  d).fcadbeg

解析:首先中序遍历根f会把左右子树分开,f不会在答案的开头和结尾,排除c和d。在看f的右子树,g是e的右子树,中序遍历先访问e,再访问g,e在g前面,排除b。答案为a。

 

例5:如下二叉树后序遍历的结果是(  )。

a)  abcdef  b) dbeafc  c)abdecf  d)debfca

解析:后序的最后一个必须是二叉树的根,快速判断答案为d。



huikk 2014-07-12 20:06
]]>
万能分页标签http://www.blogjava.net/hwpok/archive/2014/06/20/414959.htmlhuikkhuikkfri, 20 jun 2014 03:53:00 gmthttp://www.blogjava.net/hwpok/archive/2014/06/20/414959.htmlhttp://www.blogjava.net/hwpok/comments/414959.htmlhttp://www.blogjava.net/hwpok/archive/2014/06/20/414959.html#feedback0http://www.blogjava.net/hwpok/comments/commentrss/414959.htmlhttp://www.blogjava.net/hwpok/services/trackbacks/414959.html 先上一个效果:
 

1. pagebar.jar加入lib

2. action里代码(最少只需要加入3行代码):
iconditionhelper helper = conditionhelper.getinstance(servletactioncontext.getrequest());
            
            userlstreq userlstreq 
= new userlstreq();
            userlstreq.setusername(username);
            userlstreq.setbeginindex(helper.getbeginindex());
            userlstreq.setpagesize(helper.getpagesize());
            
            helper.getcondition(userlstreq, userlstreq.
class);
            
            
            userlstres res 
= userservice.queryusers(userlstreq);
            httpservletrequest request 
= servletactioncontext.getrequest();
            request.setattribute(
"list", res.getresultlst());
            request.setattribute(
"page"new basepagebarbean(helper, res.getcount()));
   

3. jsp代码(最好是写在一jsp里, 再include方便更改)
   <%@ taglib uri="http://www.huiwanpeng.com" prefix="p"%>
   
<p:pagebar totalrowcount="${page.totalrowcount}" action="${page.action}" pagesize="${page.pagesize}" currentpagenum="${page.currentpagenum}" disablecss="color:green">
 总行数#totalrowcount#   
|  
 总页数#totalpagecount#  
|
 当前第#currentpagenum#页  
|
 每页数#pagesize# 
| 
 
<a onclick="#callfirstpagefun#">第一页a>| 
 
<a onclick="#callforepagefun#"  style="#forepagedisablecss#">上一页a>|
 
<a onclick="#callnextpagefun#" style="#nextpagedisablecss#">下一页a> | 
 
<a onclick="#calllastpagefun#">最后页a> 
 
<p:loop positivestep="2" negativestep="4" isfill="true" currentpagecss="color:red">
  
<a style="#currentpagecss#" onclick="#calllooppagefun#">#currentpagenum# a>
 
p:loop>
 
<input id="#inputpagenumid#" type="text" style="width:20px"/><input type="button" value="go" onclick="#callgofun#"/>
   
p:pagebar>



huikk 2014-06-20 11:53
]]>
优化servlet配置为web.xml瘦身http://www.blogjava.net/hwpok/archive/2013/08/10/402662.htmlhuikkhuikksat, 10 aug 2013 12:01:00 gmthttp://www.blogjava.net/hwpok/archive/2013/08/10/402662.htmlhttp://www.blogjava.net/hwpok/comments/402662.htmlhttp://www.blogjava.net/hwpok/archive/2013/08/10/402662.html#feedback0http://www.blogjava.net/hwpok/comments/commentrss/402662.htmlhttp://www.blogjava.net/hwpok/services/trackbacks/402662.html以往每添加一个servlet就要在web.xml里添加,随着项目的进度,servlet数目越来越可观.web.xml里也密密麻麻的排满了这些食之无味弃之崩溃的东西,有一种方法可以改善这种境况.
<servlet> 
<servlet-name>invokerservletservlet-name> 
<servlet-class> 
org.apache.catalina.servlets.invokerservlet  
servlet-class> 
<init-param> 
<param-name>debugparam-name> 
<param-value>0param-value> 
init-param> 
<load-on-startup>-1load-on-startup> 
servlet> 
<servlet-mapping> 
<servlet-name>invokerservletservlet-name> 
<url-pattern>/servlet/*url-pattern> 
servlet-mapping>


ok,现在web.xml里保留这一个servlet配置就可以满足所有的servlet调用了,比如调用usermanagerservice这个servlet,在页面表单里这样写:

<form name="f" method="post" action="/servlet/com.mashiguang.
servlet.usermanagerservice"
> 
<input/> 
<submit/> 
form>


注意表单action"/servlet/"后面是这个servletclass的全名,以上是servlet配置为web.xml瘦身.



 



huikk 2013-08-10 20:01
]]>
java方法的可变参数类型http://www.blogjava.net/hwpok/archive/2013/05/19/399459.htmlhuikkhuikksat, 18 may 2013 17:46:00 gmthttp://www.blogjava.net/hwpok/archive/2013/05/19/399459.htmlhttp://www.blogjava.net/hwpok/comments/399459.htmlhttp://www.blogjava.net/hwpok/archive/2013/05/19/399459.html#feedback0http://www.blogjava.net/hwpok/comments/commentrss/399459.htmlhttp://www.blogjava.net/hwpok/services/trackbacks/399459.html
public static void dealarray(int intarray)
{  
     
for (int i : intarray)  
        system.out.print(i 
" ");      
     system.out.println();  
}
  


可这样调用:
dealarray(
123);  

也可以这样调用:
int[] intarray = {123};           
dealarray(intarray);  


huikk 2013-05-19 01:46
]]>
java泛型 忘了http://www.blogjava.net/hwpok/archive/2013/05/19/399458.htmlhuikkhuikksat, 18 may 2013 16:23:00 gmthttp://www.blogjava.net/hwpok/archive/2013/05/19/399458.htmlhttp://www.blogjava.net/hwpok/comments/399458.htmlhttp://www.blogjava.net/hwpok/archive/2013/05/19/399458.html#feedback0http://www.blogjava.net/hwpok/comments/commentrss/399458.htmlhttp://www.blogjava.net/hwpok/services/trackbacks/399458.html1.我们可以这样"public class box"定义一个泛型类.
  在这个定义中,使用了一个类型变量
(type variable) t,而且t能够在box类之内的任何地方被使用。
  这中定义的方法其实并不复杂,并且在接口
(interface)中也被使用。
  实际上,
t可以看作是一种特殊的数据类型,它的值就是我们要传递给它的参数,
  参数的类型可以是类,也可以是接口,或者其他类型的变量,但是却不能是原始类型
(primitive)的数据。

2.我们可以这样public void test(t t){}定义一个泛型方法.
  是用于定义泛型方法, 不加 而在方法的参数中使用t会报错.


huikk 2013-05-19 00:23
]]>
打包jar 调用jar 抓取网页乱码, 帮朋友写的一段小程序http://www.blogjava.net/hwpok/archive/2013/03/15/396466.htmlhuikkhuikkfri, 15 mar 2013 02:15:00 gmthttp://www.blogjava.net/hwpok/archive/2013/03/15/396466.htmlhttp://www.blogjava.net/hwpok/comments/396466.htmlhttp://www.blogjava.net/hwpok/archive/2013/03/15/396466.html#feedback0http://www.blogjava.net/hwpok/comments/commentrss/396466.htmlhttp://www.blogjava.net/hwpok/services/trackbacks/396466.htmlimport java.io.bufferedreader;import java.io.file;import java.io.filewriter;i...  

huikk 2013-03-15 10:15
]]>
jtable可编辑http://www.blogjava.net/hwpok/archive/2012/12/08/392674.htmlhuikkhuikksat, 08 dec 2012 15:12:00 gmthttp://www.blogjava.net/hwpok/archive/2012/12/08/392674.htmlhttp://www.blogjava.net/hwpok/comments/392674.htmlhttp://www.blogjava.net/hwpok/archive/2012/12/08/392674.html#feedback0http://www.blogjava.net/hwpok/comments/commentrss/392674.htmlhttp://www.blogjava.net/hwpok/services/trackbacks/392674.html *

     *
  • title:[filefieldeditor]

  •  *
  • description: [jtable可编辑]

  •  *
  • 凯发天生赢家一触即发官网 copyright 2009 upengs co., ltd.

  •  *
  • all right reserved.

  •  *
  • created by [huyvanpull] [2012-12-6]

  •  *
  • midified by [modifier] [modified time]

  •  *

 * @version 1.0 
 */
@suppresswarnings("serial")
public class filefieldeditor extends jcombobox implements tablecelleditor
{
   
    /** eventlistenerlist:保存eventlistener 列表的类 */
    private eventlistenerlist listenerlist = new eventlistenerlist();
   
    /** changeevent用于通知感兴趣的参与者事件源中的状态已发生更改 */
    private changeevent changeevent = new changeevent(this);
   
    /**
     *

         *
  • description:[构造方法]

  •      *

           */
          public filefieldeditor(string[] filefields)
          {
              super();
              for(string filefield : filefields)
              {
                  this.additem(filefield);
              }
              // 请求终止编辑操作可以包含单元格的jtable收到,也可以从编辑器组件本身(如这里的jcombobox)获得
              /*
               * addactionlistener(newactionlistener(){ publicvoid
               * actionperformed(actionevent e) {
               * system.out.println("actionlistener");
               * //如同stopcellediting,都是调用fireeditingstopped()方法 fireeditingstopped(); }
               * });
               */
          }
         
          public void addcelleditorlistener(celleditorlistener l)
          {
              listenerlist.add(celleditorlistener.class, l);
          }
         
          public void removecelleditorlistener(celleditorlistener l)
          {
              listenerlist.remove(celleditorlistener.class, l);
          }
         
          private void fireeditingstopped()
          {
              celleditorlistener listener;
              object[] listeners = listenerlist.getlistenerlist();
              for (int i = 0; i < listeners.length; i )
              {
                  if (listeners[i] == celleditorlistener.class)
                  {
                      // 之所以是i 1,是因为一个为celleditorlistener.class(class对象),
                      // 接着的是一个celleditorlistener的实例
                      listener = (celleditorlistener) listeners[i 1];
                      // 让changeevent去通知编辑器已经结束编辑
                      // 在editingstopped方法中,jtable调用getcelleditorvalue()取回单元格的值,
                      // 并且把这个值传递给tablevalues(tablemodel)的setvalueat()
                      listener.editingstopped(changeevent);
                  }
              }
          }
         
          public void cancelcellediting()
          {}
         
          /**
           * 编辑其中一个单元格,再点击另一个单元格时,调用。
           */
          public boolean stopcellediting()
          {
              // 可以注释掉下面的fireeditingstopped();然后在gendereditor的构造函数中把
              // addactionlistener()的注释去掉(这时请求终止编辑操作从jcombobox获得),
              // system.out.println("编辑其中一个单元格,再点击另一个单元格时,调用。");
              // 请求终止编辑操作从jtable获得
              fireeditingstopped();
              return true;
          }
         
          /**
           * 为一个单元格初始化编辑时,gettablecelleditorcomponent被调用
           */
          public component gettablecelleditorcomponent(jtable table, object value,
                  boolean isselected, int row, int column)
          {
              string s = string.valueof(value);
              setselecteditem(s);
              return this;
          }
         
          /**
           * 询问编辑器它是否可以使用 anevent 开始进行编辑。
           */
          public boolean iscelleditable(eventobject anevent)
          {
              return true;
          }
         
          /**
           * 如果应该选择正编辑的单元格,则返回true,否则返回 false。
           */
          public boolean shouldselectcell(eventobject anevent)
          {
              return true;
          }
         
          /**
           * 返回值传递给tablevalue(tablemodel)中的setvalueat()方法
           */
          public object getcelleditorvalue()
          {
              return this.getselecteditem().tostring();
          }
      }

      huikk 2012-12-08 23:12
      ]]>java 获取文件 总行数 比较http://www.blogjava.net/hwpok/archive/2012/12/06/392543.htmlhuikkhuikkthu, 06 dec 2012 05:39:00 gmthttp://www.blogjava.net/hwpok/archive/2012/12/06/392543.htmlhttp://www.blogjava.net/hwpok/comments/392543.htmlhttp://www.blogjava.net/hwpok/archive/2012/12/06/392543.html#feedback0http://www.blogjava.net/hwpok/comments/commentrss/392543.htmlhttp://www.blogjava.net/hwpok/services/trackbacks/392543.htmlimport java.io.bufferedinputstream;
      import java.io.fileinputstream;
      import java.io.filereader;
      import java.io.inputstream;
      import java.io.linenumberreader;
      import java.util.calendar;

      public class testrowcount {
          
      public static void main(string[] args) {
              
      long datestart = calendar.getinstance().gettimeinmillis();
              
      int count = getfilelinecounts("xxx");
              system.out.println(count);
              
      long dateend = calendar.getinstance().gettimeinmillis();
              system.out.println((dateend 
      - datestart) / 1000);
          }


          
      public static int getfilelinecount(string filename) {
              
      int cnt = 0;
              linenumberreader reader 
      = null;
              
      try {
                  reader 
      = new linenumberreader(new filereader(filename));
                  @suppresswarnings(
      "unused")
                  string lineread 
      = "";
                  
      while ((lineread = reader.readline()) != null{
                  }

                  cnt 
      = reader.getlinenumber();
              }
       catch (exception ex) {
                  cnt 
      = -1;
                  ex.printstacktrace();
              }
       finally {
                  
      try {
                      reader.close();
                  }
       catch (exception ex) {
                      ex.printstacktrace();
                  }

              }

              
      return cnt;
          }


          
      public static int getfilelinecounts(string filename) {
              
      int cnt = 0;
              inputstream is 
      = null;
              
      try {
                  is 
      = new bufferedinputstream(new fileinputstream(filename));
                  
      byte[] c = new byte[1024];
                  
      int readchars = 0;
                  
      while ((readchars = is.read(c)) != -1{
                      
      for (int i = 0; i < readchars; i) {
                          
      if (c[i] == '\n'{
                              
      cnt;
                          }

                      }

                  }

              }
       catch (exception ex) {
                  cnt 
      = -1;
                  ex.printstacktrace();
              }
       finally {
                  
      try {
                      is.close();
                  }
       catch (exception ex) {
                      ex.printstacktrace();
                  }

              }

              
      return cnt;
          }

      }
      总结:
      每行的字符较多时, 使用第一个方法效率较高
      每行的字符较少时, 使用第二个方法效率较高

      huikk 2012-12-06 13:39
      ]]>
      contenttype 大全http://www.blogjava.net/hwpok/archive/2012/07/16/383226.htmlhuikkhuikkmon, 16 jul 2012 06:13:00 gmthttp://www.blogjava.net/hwpok/archive/2012/07/16/383226.htmlhttp://www.blogjava.net/hwpok/comments/383226.htmlhttp://www.blogjava.net/hwpok/archive/2012/07/16/383226.html#feedback0http://www.blogjava.net/hwpok/comments/commentrss/383226.htmlhttp://www.blogjava.net/hwpok/services/trackbacks/383226.html  .* = application/octet-stream
        .001 = application/x-001
        .301 = application/x-301
        .323 = text/h323
        .906 = application/x-906
        .907 = drawing/907
        .a11 = application/x-a11
        .acp = audio/x-mei-aac
        .ai = application/postscript
        .aif = audio/aiff
        .aifc = audio/aiff
        .aiff = audio/aiff
        .anv = application/x-anv
        .asa = text/asa
        .asf = video/x-ms-asf
        .asp = text/asp
        .asx = video/x-ms-asf
        .au = audio/basic
        .avi = video/avi
        .awf = application/vnd.adobe.workflow
        .biz = text/xml
        .bmp = application/x-bmp
        .bot = application/x-bot
        .c4t = application/x-c4t
        .c90 = application/x-c90
        .cal = application/x-cals
        .cat = application/vnd.ms-pki.seccat
        .cdf = application/x-netcdf
        .cdr = application/x-cdr
        .cel = application/x-cel
        .cer = application/x-x509-ca-cert
        .cg4 = application/x-g4
        .cgm = application/x-cgm
        .cit = application/x-cit
        .class = java/*
        .cml = text/xml :客户端浏览器按xml格式进行解析文档
        .cmp = application/x-cmp
        .cmx = application/x-cmx
        .cot = application/x-cot
        .crl = application/pkix-crl
        .crt = application/x-x509-ca-cert
        .csi = application/x-csi
        .css = text/css :客户端浏览器按css格式进行解析文档
      .csv = application/vnd.ms-excel :类excel 文档
        .cut = application/x-cut
        .dbf = application/x-dbf
        .dbm = application/x-dbm
        .dbx = application/x-dbx
        .dcd = text/xml :客户端浏览器按xml格式进行解析文档
        .dcx = application/x-dcx
        .der = application/x-x509-ca-cert
        .dgn = application/x-dgn
        .dib = application/x-dib
        .dll = application/x-msdownload
        .doc = application/msword
        .dot = application/msword
        .drw = application/x-drw
        .dtd = text/xml :客户端浏览器按xml格式进行解析文档
        .dwf = model/vnd.dwf
        .dwf = application/x-dwf
        .dwg = application/x-dwg
        .dxb = application/x-dxb
        .dxf = application/x-dxf
        .edn = application/vnd.adobe.edn
        .emf = application/x-emf
        .eml = message/rfc822
        .ent = text/xml :客户端浏览器按xml格式进行解析文档
        .epi = application/x-epi
        .eps = application/x-ps
        .eps = application/postscript
        .etd = application/x-ebx
        .exe = application/x-msdownload
        .fax = image/fax
        .fdf = application/vnd.fdf
        .fif = application/fractals
        .fo = text/xml :客户端浏览器按xml格式进行解析文档
        .frm = application/x-frm
        .g4 = application/x-g4
        .gbr = application/x-gbr
        .gcd = application/x-gcd
        .gif = image/gif
        .gl2 = application/x-gl2
        .gp4 = application/x-gp4
        .hgl = application/x-hgl
        .hmr = application/x-hmr
        .hpg = application/x-hpgl
        .hpl = application/x-hpl
        .hqx = application/mac-binhex40
        .hrf = application/x-hrf
        .hta = application/hta
        .htc = text/x-component
        .htm = text/html :客户端浏览器按超文本格式进行解析文档
        .html = text/html :客户端浏览器按超文本格式进行解析文档
        .htt = text/webviewhtml
        .htx = text/html :客户端浏览器按超文本格式进行解析文档
        .icb = application/x-icb
        .ico = image/x-icon
        .ico = application/x-ico
        .iff = application/x-iff
        .ig4 = application/x-g4
        .igs = application/x-igs
        .iii = application/x-iphone
        .img = application/x-img
        .ins = application/x-internet-signup
        .isp = application/x-internet-signup
        .ivf = video/x-ivf
        .java = java/*
        .jfif = image/jpeg
        .jpe = image/jpeg
        .jpe = application/x-jpe
        .jpeg = image/jpeg
        .jpg = image/jpeg
        .jpg = application/x-jpg
        .js = application/x-javascript
        .jsp = text/html :客户端浏览器按超文本格式进行解析文档
        .la1 = audio/x-liquid-file
        .lar = application/x-laplayer-reg
        .latex = application/x-latex
        .lavs = audio/x-liquid-secure
        .lbm = application/x-lbm
        .lmsff = audio/x-la-lms
        .ls = application/x-javascript
        .ltr = application/x-ltr
        .m1v = video/x-mpeg
        .m2v = video/x-mpeg
        .m3u = audio/mpegurl
        .m4e = video/mpeg4
        .mac = application/x-mac
        .man = application/x-troff-man
        .math = text/xml
        .mdb = application/msaccess
        .mdb = application/x-mdb
        .mfp = application/x-shockwave-flash
        .mht = message/rfc822
        .mhtml = message/rfc822
        .mi = application/x-mi
        .mid = audio/mid
        .midi = audio/mid
        .mil = application/x-mil
        .mml = text/xml
        .mnd = audio/x-musicnet-download
        .mns = audio/x-musicnet-stream
        .mocha = application/x-javascript
        .movie = video/x-sgi-movie
        .mp1 = audio/mp1
        .mp2 = audio/mp2
        .mp2v = video/mpeg
        .mp3 = audio/mp3
        .mp4 = video/mpeg4
        .mpa = video/x-mpg
        .mpd = application/vnd.ms-project
        .mpe = video/x-mpeg
        .mpeg = video/mpg
        .mpg = video/mpg
        .mpga = audio/rn-mpeg
        .mpp = application/vnd.ms-project
        .mps = video/x-mpeg
        .mpt = application/vnd.ms-project
        .mpv = video/mpg
        .mpv2 = video/mpeg
        .mpw = application/vnd.ms-project
        .mpx = application/vnd.ms-project
        .mtx = text/xml
        .mxp = application/x-mmxp
        .net = image/pnetvue
        .nrf = application/x-nrf
        .nws = message/rfc822
        .odc = text/x-ms-odc
        .out = application/x-out
        .p10 = application/pkcs10
        .p12 = application/x-pkcs12
        .p7b = application/x-pkcs7-certificates
        .p7c = application/pkcs7-mime
        .p7m = application/pkcs7-mime
        .p7r = application/x-pkcs7-certreqresp
        .p7s = application/pkcs7-signature
        .pc5 = application/x-pc5
        .pci = application/x-pci
        .pcl = application/x-pcl
        .pcx = application/x-pcx
        .pdf = application/pdf :客户端浏览器按pdf格式进行解析文档
        .pdf = application/pdf
        .pdx = application/vnd.adobe.pdx
        .pfx = application/x-pkcs12
        .pgl = application/x-pgl
        .pic = application/x-pic
        .pko = application/vnd.ms-pki.pko
        .pl = application/x-perl
        .plg = text/html
        .pls = audio/scpls
        .plt = application/x-plt
        .png = image/png
        .png = application/x-png
        .pot = application/vnd.ms-powerpoint
        .ppa = application/vnd.ms-powerpoint
        .ppm = application/x-ppm
        .pps = application/vnd.ms-powerpoint
        .ppt = application/vnd.ms-powerpoint
        .ppt = application/x-ppt
        .pr = application/x-pr
        .prf = application/pics-rules
        .prn = application/x-prn
        .prt = application/x-prt
        .ps = application/x-ps
        .ps = application/postscript
        .ptn = application/x-ptn
        .pwz = application/vnd.ms-powerpoint
        .r3t = text/vnd.rn-realtext3d
        .ra = audio/vnd.rn-realaudio
        .ram = audio/x-pn-realaudio
        .ras = application/x-ras
        .rat = application/rat-file
        .rdf = text/xml
        .rec = application/vnd.rn-recording
        .red = application/x-red
        .rgb = application/x-rgb
        .rjs = application/vnd.rn-realsystem-rjs
        .rjt = application/vnd.rn-realsystem-rjt
        .rlc = application/x-rlc
        .rle = application/x-rle
        .rm = application/vnd.rn-realmedia
        .rmf = application/vnd.adobe.rmf
        .rmi = audio/mid
        .rmj = application/vnd.rn-realsystem-rmj
        .rmm = audio/x-pn-realaudio
        .rmp = application/vnd.rn-rn_music_package
        .rms = application/vnd.rn-realmedia-secure
        .rmvb = application/vnd.rn-realmedia-vbr
        .rmx = application/vnd.rn-realsystem-rmx
        .rnx = application/vnd.rn-realplayer
        .rp = image/vnd.rn-realpix
        .rpm = audio/x-pn-realaudio-plugin
        .rsml = application/vnd.rn-rsml
        .rt = text/vnd.rn-realtext
        .rtf = application/msword
        .rtf = application/x-rtf
        .rv = video/vnd.rn-realvideo
        .sam = application/x-sam
        .sat = application/x-sat
        .sdp = application/sdp
        .sdw = application/x-sdw
        .sit = application/x-stuffit
        .slb = application/x-slb
        .sld = application/x-sld
        .slk = drawing/x-slk
        .smi = application/smil
        .smil = application/smil
        .smk = application/x-smk
        .snd = audio/basic
        .sol = text/plain
        .sor = text/plain
        .spc = application/x-pkcs7-certificates
        .spl = application/futuresplash
        .spp = text/xml
        .ssm = application/streamingmedia
        .sst = application/vnd.ms-pki.certstore
        .stl = application/vnd.ms-pki.stl
        .stm = text/html
        .sty = application/x-sty
        .svg = text/xml
        .swf = application/x-shockwave-flash :客户端浏览器按  flash 格式进行解析文档
        .tdf = application/x-tdf
        .tg4 = application/x-tg4
        .tga = application/x-tga
        .tif = image/tiff
        .tif = application/x-tif
        .tiff = image/tiff
        .tld = text/xml
        .top = drawing/x-top
        .torrent = application/x-bittorrent
        .tsd = text/xml
        .txt = text/plain :客户端浏览器按  纯文本 格式进行解析文档
        .uin = application/x-icq
        .uls = text/iuls
        .vcf = text/x-vcard
        .vda = application/x-vda
        .vdx = application/vnd.visio
        .vml = text/xml
        .vpg = application/x-vpeg005
        .vsd = application/vnd.visio
        .vsd = application/x-vsd
        .vss = application/vnd.visio
        .vst = application/vnd.visio
        .vst = application/x-vst
        .vsw = application/vnd.visio
        .vsx = application/vnd.visio
        .vtx = application/vnd.visio
        .vxml = text/xml
        .wav = audio/wav
        .wax = audio/x-ms-wax
        .wb1 = application/x-wb1
        .wb2 = application/x-wb2
        .wb3 = application/x-wb3
        .wbmp = image/vnd.wap.wbmp
        .wiz = application/msword
        .wk3 = application/x-wk3
        .wk4 = application/x-wk4
        .wkq = application/x-wkq
        .wks = application/x-wks
        .wm = video/x-ms-wm
        .wma = audio/x-ms-wma
        .wmd = application/x-ms-wmd
        .wmf = application/x-wmf
        .wml = text/vnd.wap.wml
        .wmv = video/x-ms-wmv
        .wmx = video/x-ms-wmx
        .wmz = application/x-ms-wmz
        .wp6 = application/x-wp6
        .wpd = application/x-wpd
        .wpg = application/x-wpg
        .wpl = application/vnd.ms-wpl
        .wq1 = application/x-wq1
        .wr1 = application/x-wr1
        .wri = application/x-wri
        .wrk = application/x-wrk
        .ws = application/x-ws
        .ws2 = application/x-ws
        .wsc = text/scriptlet
        .wsdl = text/xml
        .wvx = video/x-ms-wvx
        .xdp = application/vnd.adobe.xdp
        .xdr = text/xml
        .xfd = application/vnd.adobe.xfd
        .xfdf = application/vnd.adobe.xfdf
        .xhtml = text/html
        .xls = application/vnd.ms-excel
        .xls = application/x-xls
        .xlw = application/x-xlw
        .xml = text/xml
        .xpl = audio/scpls
        .xq = text/xml
        .xql = text/xml
        .xquery = text/xml
        .xsd = text/xml
        .xsl = text/xml
        .xslt = text/xml
        .xwd = application/x-xwd
        .x_b = application/x-x_b
        .x_t = application/x-x_t


      huikk 2012-07-16 14:13
      ]]>
      java 语言播报http://www.blogjava.net/hwpok/archive/2012/06/09/380406.htmlhuikkhuikksat, 09 jun 2012 07:52:00 gmthttp://www.blogjava.net/hwpok/archive/2012/06/09/380406.htmlhttp://www.blogjava.net/hwpok/comments/380406.htmlhttp://www.blogjava.net/hwpok/archive/2012/06/09/380406.html#feedback0http://www.blogjava.net/hwpok/comments/commentrss/380406.htmlhttp://www.blogjava.net/hwpok/services/trackbacks/380406.htmlhttp://sd.csdn.net/a/20111228/309754.html





      huikk 2012-06-09 15:52
      ]]>
      读utf8文件,第一行前多出一个问号http://www.blogjava.net/hwpok/archive/2012/04/20/375365.htmlhuikkhuikkfri, 20 apr 2012 07:28:00 gmthttp://www.blogjava.net/hwpok/archive/2012/04/20/375365.htmlhttp://www.blogjava.net/hwpok/comments/375365.htmlhttp://www.blogjava.net/hwpok/archive/2012/04/20/375365.html#feedback0http://www.blogjava.net/hwpok/comments/commentrss/375365.htmlhttp://www.blogjava.net/hwpok/services/trackbacks/375365.htmlbufferedreader br = new bufferedreader(new unicodereader(in, charset.defaultcharset().name())); 


      import java.io.*;

      public class unicodereader extends reader {
        pushbackinputstream internalin;
        inputstreamreader   internalin2 
      = null;
        string              defaultenc;

        
      private static final int bom_size = 4;

        
        unicodereader(inputstream in, string defaultenc) 
      {
           internalin 
      = new pushbackinputstream(in, bom_size);
           
      this.defaultenc = defaultenc;
        }


        
      public string getdefaultencoding() {
           
      return defaultenc;
        }


        
        
      public string getencoding() {
           
      if (internalin2 == nullreturn null;
           
      return internalin2.getencoding();
        }


        
        
      protected void init() throws ioexception {
           
      if (internalin2 != nullreturn;

           string encoding;
           
      byte bom[] = new byte[bom_size];
           
      int n, unread;
           n 
      = internalin.read(bom, 0, bom.length);

           
      if ( (bom[0== (byte)0x00&& (bom[1== (byte)0x00&&
                       (bom[
      2== (byte)0xfe&& (bom[3== (byte)0xff) ) {
              encoding 
      = "utf-32be";
              unread 
      = n - 4;
           }
       else if ( (bom[0== (byte)0xff&& (bom[1== (byte)0xfe&&
                       (bom[
      2== (byte)0x00&& (bom[3== (byte)0x00) ) {
              encoding 
      = "utf-32le";
              unread 
      = n - 4;
           }
       else if (  (bom[0== (byte)0xef&& (bom[1== (byte)0xbb&&
                 (bom[
      2== (byte)0xbf) ) {
              encoding 
      = "utf-8";
              unread 
      = n - 3;
           }
       else if ( (bom[0== (byte)0xfe&& (bom[1== (byte)0xff) ) {
              encoding 
      = "utf-16be";
              unread 
      = n - 2;
           }
       else if ( (bom[0== (byte)0xff&& (bom[1== (byte)0xfe) ) {
              encoding 
      = "utf-16le";
              unread 
      = n - 2;
           }
       else {
              
      // unicode bom mark not found, unread all bytes
              encoding = defaultenc;
              unread 
      = n;
           }
          
           
      //system.out.println("read="   n   ", unread="   unread);

           
      if (unread > 0) internalin.unread(bom, (n - unread), unread);

           
      // use given encoding
           if (encoding == null{
              internalin2 
      = new inputstreamreader(internalin);
           }
       else {
              internalin2 
      = new inputstreamreader(internalin, encoding);
           }

        }


        
      public void close() throws ioexception {
           init();
           internalin2.close();
        }


        
      public int read(char[] cbuf, int off, int len) throws ioexception {
           init();
           
      return internalin2.read(cbuf, off, len);
        }


      }


      huikk 2012-04-20 15:28
      ]]>
      五个有用的过滤器 http://www.blogjava.net/hwpok/archive/2012/02/13/369869.htmlhuikkhuikkmon, 13 feb 2012 06:55:00 gmthttp://www.blogjava.net/hwpok/archive/2012/02/13/369869.htmlhttp://www.blogjava.net/hwpok/comments/369869.htmlhttp://www.blogjava.net/hwpok/archive/2012/02/13/369869.html#feedback0http://www.blogjava.net/hwpok/comments/commentrss/369869.htmlhttp://www.blogjava.net/hwpok/services/trackbacks/369869.htmlimport javax.servlet.*;    import javax.servlet.http.h...  

      huikk 2012-02-13 14:55
      ]]>
      el和ognl取pagecontext、parameters、request、session、application 等处的属性值http://www.blogjava.net/hwpok/archive/2012/02/02/369212.htmlhuikkhuikkthu, 02 feb 2012 01:28:00 gmthttp://www.blogjava.net/hwpok/archive/2012/02/02/369212.htmlhttp://www.blogjava.net/hwpok/comments/369212.htmlhttp://www.blogjava.net/hwpok/archive/2012/02/02/369212.html#feedback0http://www.blogjava.net/hwpok/comments/commentrss/369212.htmlhttp://www.blogjava.net/hwpok/services/trackbacks/369212.html

      对于取pagecontext、parameters、request、session、application 等处的属性值(假如有 name 属性)时我们用的 el 表达式分别是:

      ${pagescope.name}、${param.name}、{$requestscope.name}、{$sessionscope.name}、{$applicationscope.name}

      那么对应的 ognl 的凯发天生赢家一触即发官网的解决方案分别是:

       






      说明,attr 如果可以访问到,则访问 pagecontext,否则将 依次搜索 pagecontext、request、session、application 相应值,所以可用来访问 pagecontext 中的值,可替代 el 的 ${pagescope.name}。

       

      --eof--



      huikk 2012-02-02 09:28
      ]]>
      java 随机数http://www.blogjava.net/hwpok/archive/2011/12/11/366107.htmlhuikkhuikksun, 11 dec 2011 13:59:00 gmthttp://www.blogjava.net/hwpok/archive/2011/12/11/366107.htmlhttp://www.blogjava.net/hwpok/comments/366107.htmlhttp://www.blogjava.net/hwpok/archive/2011/12/11/366107.html#feedback0http://www.blogjava.net/hwpok/comments/commentrss/366107.htmlhttp://www.blogjava.net/hwpok/services/trackbacks/366107.html

      huikk 2011-12-11 21:59
      ]]>
      任何进制之间相互转换http://www.blogjava.net/hwpok/archive/2011/12/08/365919.htmlhuikkhuikkthu, 08 dec 2011 11:18:00 gmthttp://www.blogjava.net/hwpok/archive/2011/12/08/365919.htmlhttp://www.blogjava.net/hwpok/comments/365919.htmlhttp://www.blogjava.net/hwpok/archive/2011/12/08/365919.html#feedback0http://www.blogjava.net/hwpok/comments/commentrss/365919.htmlhttp://www.blogjava.net/hwpok/services/trackbacks/365919.htmlpackage atm;

      import java.math.biginteger;

      /**
       * 

         * 
      • title:[scaleutil]

      •  * 
      • description: [任何进制之间相互转换]

      •  * 
      • 凯发天生赢家一触即发官网 copyright 2009 upengs co., ltd.

      •  * 
      • all right reserved.

      •  * 
      • created by [huyvanpull] [2011-12-8]

      •  * 
      • midified by [modifier] [modified time]

      •  * 

       * 
       * 
      @version 1.0
       
      */

      public class scaleutil
      {
          
      /**
           * 

             * 
      • description:[任何进制转10进制]

      •      * 
      • created by [huyvanpull] [2011-12-8]

      •      * 
      • midified by [modifier] [modified time]

      •      * 

           * 
           * 
      @param anyscalestr
           * 
      @param oscale
           * 
      @return
           
      */

          
      public string anyscale2tenscale(string anyscalestr, long oscale)
          
      {
              biginteger tenscaleresult 
      = new biginteger("0");
              string[] numstrs 
      = anyscalestr.split("[,]");
              
      for (int i = 0; i < numstrs.length; i)
              
      {
                  tenscaleresult 
      = tenscaleresult.add(biginteger.valueof(oscale).pow(
                          numstrs.length 
      - 1 - i).multiply(
                          biginteger.valueof(long.parselong(numstrs[i]))));
              }

              
      return tenscaleresult.tostring();
          }

          
          
      /**
           * 

             * 
      • description:[10进制转任何进制]

      •      * 
      • created by [huyvanpull] [2011-12-8]

      •      * 
      • midified by [modifier] [modified time]

      •      * 

           * 
           * 
      @param tenscalestr
           * 
      @param tscale
           * 
      @return
           
      */

          
      public string tenscale2anyscale(string tenscalestr, long tscale)
          
      {
              stringbuffer result 
      = new stringbuffer();
              biginteger c62source 
      = new biginteger(tenscalestr);
              
      while (true)
              
      {
                  result.insert(
      0, c62source.mod(biginteger.valueof(tscale))  ",");
                  c62source 
      = c62source.divide(biginteger.valueof(tscale));
                  
      if (biginteger.valueof(tscale).compareto(c62source) == 1)
                  
      {
                      
      if (c62source.longvalue() != 0)
                          result.insert(
      0, c62source.longvalue()  ",");
                      
      break;
                  }

              }

              
      return result.tostring();
          }

          
          
      public static void main(string[] args)
          
      {
              scaleutil su 
      = new scaleutil();
              string anyscalestr 
      = su.tenscale2anyscale("63"16);
              system.out.println(anyscalestr);
              string tenscalestr 
      = su.anyscale2tenscale(anyscalestr, 16);
              system.out.println(tenscalestr);
          }

      }



      huikk 2011-12-08 19:18
      ]]>
      利用java迭代器itetator遍历并删除hashmap中的元素问题http://www.blogjava.net/hwpok/archive/2011/11/05/362723.htmlhuikkhuikkfri, 04 nov 2011 17:42:00 gmthttp://www.blogjava.net/hwpok/archive/2011/11/05/362723.htmlhttp://www.blogjava.net/hwpok/comments/362723.htmlhttp://www.blogjava.net/hwpok/archive/2011/11/05/362723.html#feedback1http://www.blogjava.net/hwpok/comments/commentrss/362723.htmlhttp://www.blogjava.net/hwpok/services/trackbacks/362723.html问题:
      下面的代码试图利用hashmap的iterator对象遍历该hashmap并删除满足条件的元素(比如超时的元素),但会抛出java.util.concurrentmodificationexception异常
          public static void main(string[] args)
              
              hashmap hs=new hashmap();    
              hs.put("p1", "1");
              hs.put("p2", "1");
              hs.put("p3", "1");
              hs.put("p4", "1");
              hs.put("p5", "1");
              hs.put("p6", "1");       
              iterator it=hs.keyset().iterator();      
              while(it.hasnext())
              {
                  string str=(string)it.next();               
                  system.out.println(hs);   

                   //逻辑处理.........         
                   .............
                  hs.remove(str);      
               
      }
          原因应该
      hs.remove(str)后,it内容没变,并且it里的指针列表又重新排序,所以只要确保删除任一元素后,it保持同步更新即可:
          凯发天生赢家一触即发官网的解决方案一:
      删除任一元素后,it保持同步更新
          ............
            
      iterator it=hs.keyset().iterator();   
              while(it.hasnext())
              {
                  it=hs.keyset().iterator();  
                  string str=(string)it.next();               
                  system.out.println(hs);   

                   //逻辑处理.........         
                   .............
                  hs.remove(str);      
               

          ...........
          这样的时间复杂度明显太大(两层循环嵌套)
          凯发天生赢家一触即发官网的解决方案二:
      由于删除元素时,hs的iterator对象也重新排序,所以只要用hs的一个副本hsback
      uackp的iterator去遍历hs即可,这样在删除hs元素时iterator就不会重排了(因为删除的是hs的元素,而不是该iterator所属的
      hsbackuackp
      ...................
              hsbackup=(hashmap)hs.clone();
              iterator it=hsbackup.keyset().iterator();
              system.out.println(hsbackup);
              while(it.hasnext())
              {
                  string str=(string)it.next();               
                  system.out.println(hs);               
                  hs.remove(str);       
               
      .....................
          这样虽然时间复杂度小了(只有一层循环),可是空间复杂度大了(多了一个hashmap的拷贝);
          查阅api文档和相关资料后,原来iterator对象有一remove方法:
      void remove()       
      removes from the underlying collection the last element returned by the
      iterator (optional operation). this method can be called only once per
      call to
      next. the behavior of an iterator is unspecified if
      the underlying collection is modified while the iteration is in
      progress in any way other than by calling this method.

      于是有下面的改进:
      凯发天生赢家一触即发官网的解决方案三:
      ..............................
      iterator it=hs.keyset().iterator();
      while(it.hasnext())
      {
      string str=(string)it.next();
      system.out.println(hs);
      it.remove();
      }
      ..............................


      huikk 2011-11-05 01:42
      ]]>
      mina encodehttp://www.blogjava.net/hwpok/archive/2011/09/05/358016.htmlhuikkhuikkmon, 05 sep 2011 11:17:00 gmthttp://www.blogjava.net/hwpok/archive/2011/09/05/358016.htmlhttp://www.blogjava.net/hwpok/comments/358016.htmlhttp://www.blogjava.net/hwpok/archive/2011/09/05/358016.html#feedback0http://www.blogjava.net/hwpok/comments/commentrss/358016.htmlhttp://www.blogjava.net/hwpok/services/trackbacks/358016.htmlpackage org.upeng.mail.net.util;

      import org.apache.mina.core.buffer.iobuffer;
      import org.apache.mina.core.session.iosession;
      import org.apache.mina.filter.codec.cumulativeprotocoldecoder;
      import org.apache.mina.filter.codec.protocoldecoderoutput;

      public class messagedecoder extends cumulativeprotocoldecoder
      {
          
      public static final int max_image_size = 1024 * 1024 * 5;
          
          
      private static final string decoder_state_key = getkey();
          
          
      protected boolean dodecode(iosession session, iobuffer in,
                  protocoldecoderoutput out) 
      throws exception
          
      {
              system.out.println(
      "decode-开始");
              
              context context 
      = (context) session.getattribute(decoder_state_key);
              
      if(context == null)
              
      {
                  context 
      = new context();
                  session.setattribute(decoder_state_key, context);
              }

              
              
      while(true)
              
      {
                  
      if (in.prefixeddataavailable(4, max_image_size))
                  
      {
                      
      int piecelength = in.getint();
                      
      int totallength = in.getint();
                      context.settotallength(totallength);
                      
      byte[] bytes = new byte[piecelength - 4];
                      in.get(bytes);
                      context.addpiece(bytes);
                      
      if (context.iscomplete())
                      
      {
                          message message 
      = new message(context.gettotaldata());
                          out.write(message);
                          session.removeattribute(decoder_state_key);
                          
      return true;
                      }

                  }

                  
      else
                  
      {
                      
      return false;
                  }

              }

              
      //system.out.println("decode-结束");
              
      //return false;
          }

          
          
      /**
           * 

             * 
      • description:[得到键值]

      •      * 
      • created by [huyvanpull] [2011-9-5]

      •      * 
      • midified by [modifier] [modified time]

      •      * 

           * 
           * 
      @return
           
      */

          
      private static string getkey()
          
      {
              
      return messagedecoder.class.getname()  ".state";
          }

      }

      2.
      package org.upeng.mail.net.util;

      import java.util.list;

      import org.apache.mina.core.buffer.iobuffer;
      import org.apache.mina.core.session.iosession;
      import org.apache.mina.filter.codec.protocolencoderadapter;
      import org.apache.mina.filter.codec.protocolencoderoutput;

      public class messageencoder extends protocolencoderadapter
      {
          
      public void encode(iosession session, object message,
                  protocolencoderoutput out) 
      throws exception
          
      {
              system.out.println(
      "encode-开始");
              message msg 
      = (message) message;
              
              iobuffer buffer 
      = iobuffer.allocate(1024).setautoexpand(true);
              
              
      // 定义上下文
              context context = new context(msg.getdatabody());
              list
      <byte[]> piecelst = context.getpiecelst();
              
      for (int i=0; i<piecelst.size(); i)
              
      {
                  
      byte[] temp = piecelst.get(i);
                  buffer.putint(temp.length 
       4);
                  buffer.putint(msg.getdatabody().length);
                  buffer.put(temp);
              }

              buffer.flip();
              out.write(buffer);
              out.flush();
              system.out.println(
      "decode-结束");
          }

          
      }





      huikk 2011-09-05 19:17
      ]]>
      (转)nio bytebufferhttp://www.blogjava.net/hwpok/archive/2011/09/04/357944.htmlhuikkhuikksun, 04 sep 2011 11:27:00 gmthttp://www.blogjava.net/hwpok/archive/2011/09/04/357944.htmlhttp://www.blogjava.net/hwpok/comments/357944.htmlhttp://www.blogjava.net/hwpok/archive/2011/09/04/357944.html#feedback0http://www.blogjava.net/hwpok/comments/commentrss/357944.htmlhttp://www.blogjava.net/hwpok/services/trackbacks/357944.html在 nio 库中,所有数据都是用缓冲区处理的。在读取数据时,它是直接读到缓冲区中的。在写入数据时,它是写入到缓冲区中的。任何时候访问 nio 中的数据,都是将它放到缓冲区中。缓冲区实质上是一个数组。通常它是一个字节数组,但是也可以使用其他种类的数组。但是一个缓冲区不仅仅是一个数组。缓冲区提供了对数据的结构化访问,而且还可以跟踪系统的读/写进程。

      buffer其实只是一个美化了的数组。

      状态变量
      跟踪数据的状态情况使buffer可以自己管理数据资源 

      position: 其实是指从buffer读取或写入buffer的下一个元素位置。比如,已经写入buffer 3个元素那那么position就是指向第4个位置,即position设置为3(数组从0开始计)。
      limit:还有多少数据需要从buffer中取出,或还有多少空间可以放入。postition总是
      <=limit。
      capacity: 表示buffer本身底层数组的容量。limit绝不能
      >capacity。
      filp():作了两件事情:
      1.将limit指向现在position的位置 2.将position设置为0 (limit=position;position=0
             这个过程可以使之前buffer写入数据时改变的状态变为可以“准备读取”。因为之前写到buffer中的数据就是position 到 limit
      -1 两个位置之间(limit指向最后一个数据的后一个位置)。

      clear():
          也作了两件事:
      1. limit=capacity 2.position=0
      这个过程可以使buffer读取数据时改变的状态改变为“清空并准备写入”。

      访问方法
      以下都以bytebuffer为例
      get():
         前三个get方法是相对读取。就是相对于位置状态来读取数据,并且会改变position位置状态。
         
      byte get();
         bytebuffer get(
      byte dst[]);//读取bytebuffer中数据写入 dst[]
         bytebuffer get(byte dst[],int offset, int length);
         
         该读取数据是绝对读取(一个byte),即会忽略limit和position值。并完全绕过了缓冲区的状态统计方法。
         就是说不会改变buffer内部的位置状态。
         
      byte get(int index);
       
      put();
         与get类似 前四个put方法是相对读取。即受position 以及limit影响,并且会改变 position。
         bytebuffer put( 
      byte b );
         bytebuffer put( 
      byte src[] ); //从src[]写入bytebuffer
         bytebuffer put( byte src[], int offset, int length );
         bytebuffer put( bytebuffer src );
         最后一个是绝对写入 不会影响position等位置状态。
         bytebuffer put( 
      int index, byte b );
       
      除了byte的读写还有其他类型的读写方法。并且他们都存在相对以及绝对两类。
       
      操作的典型使用:
      view plaincopy to clipboardprint
      ?while (true{  
           buffer.clear(); 
      // 准备将数据写入buffer   
           int r = fcin.read( buffer ); // channel读取外部系统的数据并写入 buffer   
           if (r==-1{  
             
      break;  
           }
        
           buffer.flip(); 
      //准备将数据读出buffer   
           fcout.write( buffer ); // channel读取buffer的数据并写到相应的外部系统   
      }
        
      while (true{
           buffer.clear(); 
      // 准备将数据写入buffer
           int r = fcin.read( buffer ); // channel读取外部系统的数据并写入 buffer
           if (r==-1{
             
      break;
           }

           buffer.flip(); 
      //准备将数据读出buffer
           fcout.write( buffer ); // channel读取buffer的数据并写到相应的外部系统
      }
       
      高级应用
      缓存区的分配和包装
      bytebuffer.allocate(
      int);方法可以分配(创建)一个byte类型的buffer。
      bytebuffer.wrap(
      byte[]);方法可以将一个已有的byte数组包装出一个新的bytebuffer对象。
      后一种方式需要小心处理原来的那个byte数组。因为它可以直接访问了。
      缓冲区的分片
      分片就是建立“子缓冲区”。子缓冲区共享父缓冲区的一部分底层数组位置。
      在某种意义上,子缓冲区就像原来的缓冲区中的一个窗口。
      这样当改变子缓冲区的内容时,父缓冲区的相应位置也会被改变。
      分片操作是根据当前position以及limit的值来确定的。
      buffer.position( 
      3 );
      buffer.limit( 
      7 );
      bytebuffer slice 
      = buffer.slice();
      只读缓冲区
      asreadonlybuffer()方法可以返回一个与原buffer对象一样的对象,只是新的buffer对象是只读的。
      直接缓冲区
      sun的定义:给定一个直接字节缓冲区,java 虚拟机将尽最大努力直接对它执行本机 i
      /o 操作。也就是说,它会在每一次调用底层操作系统的本机 i/o 操作之前(或之后),尝试避免将缓冲区的内容拷贝到一个中间缓冲区中(或者从一个中间缓冲区中拷贝数据)。
      创建directbuffer的方式是用bytebuffer.allocatedirect( 
      int );方法替代bytebuffer.allocate(int);
      内存影射文件i
      /o
      它读写要比其他io快很多.
      他使文件或文件的一部分由内存影射。但是只有操作该部分位置的数据才是以内存方式读写的,而不是整个文件读入内存。(并且他是一个os的底层机制。由os底层异步完成内存与物理磁盘上的数据同步)
      影射文件可以通过filechannel对象的map方法得到。
      比如以下就是将一个文件的前1024个字节影射到内存,并创建一个mappedbytebuffer对象返回出来。mappedbytebuffer是bytebuffer的一个子类。
      mappedbytebuffer mbb 
      = fc.map( filechannel.mapmode.read_write, start, size );


      huikk 2011-09-04 19:27
      ]]>
      java 访问修饰符http://www.blogjava.net/hwpok/archive/2011/09/03/357926.htmlhuikkhuikksat, 03 sep 2011 15:55:00 gmthttp://www.blogjava.net/hwpok/archive/2011/09/03/357926.htmlhttp://www.blogjava.net/hwpok/comments/357926.htmlhttp://www.blogjava.net/hwpok/archive/2011/09/03/357926.html#feedback4http://www.blogjava.net/hwpok/comments/commentrss/357926.htmlhttp://www.blogjava.net/hwpok/services/trackbacks/357926.html阅读全文

      huikk 2011-09-03 23:55
      ]]>
      imagehelperhttp://www.blogjava.net/hwpok/archive/2011/09/01/357732.htmlhuikkhuikkthu, 01 sep 2011 06:32:00 gmthttp://www.blogjava.net/hwpok/archive/2011/09/01/357732.htmlhttp://www.blogjava.net/hwpok/comments/357732.htmlhttp://www.blogjava.net/hwpok/archive/2011/09/01/357732.html#feedback1http://www.blogjava.net/hwpok/comments/commentrss/357732.htmlhttp://www.blogjava.net/hwpok/services/trackbacks/357732.htmlimport java.net.*;
      import java.awt.*;
      import javax.swing.*;

      public class imagehelper
      {
          
          
      private imagehelper()
          
      {}
          
          
      public static image loadimage(string name)
          
      {
              image image 
      = null;
              
      try
              
      {
                  url url 
      = imagehelper.class.getresource(name);
                  
      if (url != null)
                  
      {
                      image 
      = toolkit.getdefaulttoolkit().createimage(url);
                                  }

              }

              
      catch (throwable ex)
              
      {
                  system.out.println(
      "error: loading image "  name  " failed");
              }

              
      return image;
          }

          
          
      public static imageicon loadicon(string name)
          
      {
              image image 
      = imagehelper.loadimage(name);
              
      if (image != null)
              
      {
                  
      return new imageicon(image);
              }

              
      return null;
          }

      }



      huikk 2011-09-01 14:32
      ]]>
      socketpoolhttp://www.blogjava.net/hwpok/archive/2011/08/30/357594.htmlhuikkhuikktue, 30 aug 2011 10:01:00 gmthttp://www.blogjava.net/hwpok/archive/2011/08/30/357594.htmlhttp://www.blogjava.net/hwpok/comments/357594.htmlhttp://www.blogjava.net/hwpok/archive/2011/08/30/357594.html#feedback0http://www.blogjava.net/hwpok/comments/commentrss/357594.htmlhttp://www.blogjava.net/hwpok/services/trackbacks/357594.html 
      package example.helloword.client;

      import java.util.concurrent.executorservice;
      import java.util.concurrent.executors;
      import java.util.concurrent.future;

      public class sendmsgpool
      {
          
      private static sendmsgpool sendmsgpool = new sendmsgpool();
          
          
      private executorservice pool;
          
          
      private sendmsgpool()
          
      {
              pool 
      = executors.newfixedthreadpool(3);
          }

          
          
      public static sendmsgpool getinstance()
          
      {
              
      return sendmsgpool;
          }

          
          
      public future<string> sendmsg(string local, int port, string msg)
          
      {
              clinetsocket clientscoket 
      = clientsocketpool.getinstance()
                      .getclientsocket(local, port);
              clienttread ct 
      = new clienttread(clientscoket, msg);
              
      return pool.submit(ct);
          }

          
          
      public void shutdown()
          
      {
              
      this.pool.shutdown();
          }

      }

       



      huikk 2011-08-30 18:01
      ]]>
      apache mina框架小试http://www.blogjava.net/hwpok/archive/2011/08/30/357563.htmlhuikkhuikktue, 30 aug 2011 05:11:00 gmthttp://www.blogjava.net/hwpok/archive/2011/08/30/357563.htmlhttp://www.blogjava.net/hwpok/comments/357563.htmlhttp://www.blogjava.net/hwpok/archive/2011/08/30/357563.html#feedback0http://www.blogjava.net/hwpok/comments/commentrss/357563.htmlhttp://www.blogjava.net/hwpok/services/trackbacks/357563.htmlpackage server;import java.net.inetsocketaddress;import org.apache.mina.core...  

      huikk 2011-08-30 13:11
      ]]>
      jboss netty 框架小试http://www.blogjava.net/hwpok/archive/2011/08/30/357562.htmlhuikkhuikktue, 30 aug 2011 05:07:00 gmthttp://www.blogjava.net/hwpok/archive/2011/08/30/357562.htmlhttp://www.blogjava.net/hwpok/comments/357562.htmlhttp://www.blogjava.net/hwpok/archive/2011/08/30/357562.html#feedback2http://www.blogjava.net/hwpok/comments/commentrss/357562.htmlhttp://www.blogjava.net/hwpok/services/trackbacks/357562.htmlpackage example.helloword.server;import java.net.inetsocketaddress;import ja...  

      huikk 2011-08-30 13:07
      ]]>
网站地图