仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 621|回复: 12
打印 上一主题 下一主题

[学习教程] JAVA编程:FileExtendedAttributes的退化历程仓酷云

[复制链接]
金色的骷髅 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-18 11:22:45 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
学习JAVA的目的更多的是培养自身的工作能力,我觉得工作能力的一个核心就是:独立思考能力,因为只有独立思考后,才会有自己的见解正忙于的体系必要用到linux文件体系的扩大属性的特征,因为jdk6还未能供应API上的撑持,只好选用JNA来挪用Native办法完成了.
参考JNA的官方文档,中心部分的代码很复杂,以下:
  1. 01interfaceNativeLibextendsLibrary{02NativeLibLIB=(NativeLib)synchronizedLibrary((NativeLib)loadLibrary("libc.so.6",NativeLib.class));03intsetxattr(Stringpathname,Stringname,Buffervalue,intsize,intflags);04intgetxattr(Stringpathname,Stringname,Buffervalue,intsize);05}
复制代码
在体系中挪用的代码,看上往会是如许的:
  1. 01Bufferid=IntBuffer.wrap(newint[]{998});02NativeLib.LIB.setxattr("/path/to/file","user.id",id,4,0);
复制代码
下面的写法很包袱,利用起来不敷简便,若我是编写挪用的程序员,我大概会更喜好如许:
  1. 01FileExtendedAttributesxattr=newFileExtendedAttributes("/path/to/file");02xattr.setId(998);
复制代码
因而,最后版本的FileExtendedAttributes完成会是:
  1. 01publicfinalclassFileExtendedAttributes{02publicstaticfinalStringID="user.id";03privatefinalStringpath;04privateFileExtendedAttributes(Stringpath){this.path=path;}0506publicvoidsetId(intid)throwsIOException{07finalBufferbuffer=IntBuffer.wrap(newint[]{id});08finalintreturnCode=LIB.setxattr(path,ID,buffer,4,0);09if(returnCode==ERROR)thrownewIOException("Operationfailed,anderrornois"+returnCode);10}1112publicintgetId()throwsIOException{13finalIntBufferbuffer=IntBuffer.allocate(1);14finalintreturnCode=LIB.getxattr(path,ID,buffer,4);15if(returnCode==ERROR)thrownewIOException("Operationfailed,anderrornois"+returnCode);16returnbuffer.get(0);17}18}
复制代码
看上往不错.固然,这儿并不是只要id如许一个属性,另有replication,blockSize,length…
云云一个个加上完成的代码,很快就发明,我在不休的反复编写:
  1. 01publicvoidsetXxx(Tvalue)throwsIOException{02finalBufferbuffer=TBuffer.wrap(newT[]{value});03finalintreturnCode=LIB.setxattr(path,Xxx,buffer,SIZE,0);04if(returnCode==ERROR)thrownewIOException("Operationfailed,anderrornois"+returnCode);05}0607publicTgetXxx()throwsIOException{08finalTBufferbuffer=TBuffer.allocate(1);09finalTreturnCode=LIB.getxattr(path,Xxx,buffer,SIZE);10if(returnCode==ERROR)thrownewIOException("Operationfailed,anderrornois"+returnCode);11returnbuffer.get(0);12}
复制代码
天晓得今后另有有几属性会变更,事变决不克不及像如许糟下往,究竟反复事变应当由电脑帮我们完成,否则程序员的代价安在?
细心察看代码纪律,能够抽取配合的办法:
  1. 01publicstaticfinalStringUSER_PREFIX="user.";02publicstaticfinalintFLAGS=0;0304publicvoidset(Stringname,Bufferbuffer,intsize)throwsIOException{05throwIoExceptionIfFailed(LIB.setxattr(path,USER_PREFIX+name,buffer,size,FLAGS));06}0708publicvoidget(Stringname,Bufferbuffer,intsize)throwsIOException{09throwIoExceptionIfFailed(LIB.getxattr(path,USER_PREFIX+name,buffer,size));10}1112privatestaticvoidthrowIoExceptionIfFailed(intreturnCode)throwsIOException{13if(returnCode<0)14thrownewIOException("Operationfailed,anderrornois"+returnCode);15}
复制代码
接上去,只必要依据可预感的属性值范例供应多少人本接口便可了:
  1. 01publicvoidset(Stringname,shortvalue)throwsIOException{set(name,buffer(value),2);}02publicvoidset(Stringname,intvalue)throwsIOException{set(name,buffer(value),4);}03publicvoidset(Stringname,longvalue)throwsIOException{set(name,buffer(value),8);}04publicvoidset(Stringname,Stringvalue)throwsIOException{set(name,buffer(value),value.getBytes().length);}0506publicshortgetShort(Stringname)throwsIOException{07finalShortBufferbuffer=ShortBuffer.allocate(1);08get(name,buffer,2);09returnbuffer.get(0);10}1112publicintgetInt(Stringname)throwsIOException{13finalIntBufferbuffer=IntBuffer.allocate(1);14get(name,buffer,4);15returnbuffer.get(0);16}1718publiclonggetLong(Stringname)throwsIOException{19finalLongBufferbuffer=LongBuffer.allocate(1);20get(name,buffer,8);21returnbuffer.get(0);22}2324publicStringgetString(Stringname,intsize)throwsIOException{25finalByteBufferbuffer=ByteBuffer.allocate(size);26get(name,buffer,size);27returnnewString(buffer.array());28}2930privatestaticBufferbuffer(shortvalue){returnShortBuffer.wrap(newshort[]{value});}31privatestaticBufferbuffer(intvalue){returnIntBuffer.wrap(newint[]{value});}32privatestaticBufferbuffer(longvalue){returnLongBuffer.wrap(newlong[]{value});}33privatestaticBufferbuffer(Stringvalue){returnByteBuffer.wrap(value.getBytes());}
复制代码
至于像setXxx之类的,因为属性变更大概太频仍,不如set(name,value)来的天真,并且如许也充足复杂,以是就省了吧.
嗯,差未几了.如果属性值范例不成预感,大概还可思索利用对象的多态性举行进一步重构,但就今朝的场景应当够用了吧.
出工!
完全代码请见https://github.com/zhongl/jtoolkit/blob/master/src/main/java/com/github/zhongl/jtoolkit/FileExtendedAttributes.java

首先第一点:jsp,servlet,javabean这些最基本的,嘿嘿,就算你是高手的话,在大行的企业级应用的话还是需要框架的,一个好的框架确实能构解决许多问题。
爱飞 该用户已被删除
沙发
发表于 2015-1-18 18:14:00 | 只看该作者
是一种简化的C++语言 是一种安全的语言,具有阻绝计算机病毒传输的功能
变相怪杰 该用户已被删除
板凳
发表于 2015-1-22 19:57:22 来自手机 | 只看该作者
Pet Store.(宠物店)是SUN公司为了演示其J2EE编程规范而推出的开放源码的程序,应该很具有权威性,想学J2EE和EJB的朋友不要 错过了。
愤怒的大鸟 该用户已被删除
地板
发表于 2015-1-31 10:00:19 | 只看该作者
你现在最缺的是实际的工作经验,而不是书本上那些凭空想出来的程序。
只想知道 该用户已被删除
5#
发表于 2015-2-4 02:39:28 | 只看该作者
所以现在应用最广泛又最好学的就是J2EE了。 J2EE又包括许多组件,如Jsp,Servlet,JavaBean,EJB,JDBC,JavaMail等。要学习起来可不是一两天的事。那么又该如何学习J2EE呢?当然Java语法得先看一看的,I/O包,Util包,Lang包你都熟悉了吗?然后再从JSP学起。
admin 该用户已被删除
6#
发表于 2015-2-6 10:18:22 | 只看该作者
应用在电视机、电话、闹钟、烤面包机等家用电器的控制和通信。由于这些智能化家电的市场需求没有预期的高,Sun公司放弃了该项计划。随着1990年代互联网的发展
若天明 该用户已被删除
7#
发表于 2015-2-7 13:30:02 | 只看该作者
你就该学一学Servlet了。Servlet就是服务器端小程序,他负责生成发送给客户端的HTML文件。JSP在执行时,也是先转换成Servlet再运行的。虽说JSP理论上可以完全取代Servlet,这也是SUN推出JSP的本意,可是Servlet用来控制流程跳转还是挺方便的,也令程序更清晰。接下来你应该学习一下Javabean了,可能你早就看不管JSP在HTML中嵌Java代码的混乱方式了,这种方式跟ASP又有什么区别呢?
莫相离 该用户已被删除
8#
发表于 2015-2-20 13:58:48 | 只看该作者
《JAVA语言程序设计》或《JAVA从入门到精通》这两本书开始学,等你编程有感觉的时候也可以回看一下。《JAVA读书笔记》这本书,因为讲的代码很多,也很容易看懂,涉及到面也到位。是你学习技术巩固的好书,学完后就看看《JAVA编程思想》这本书,找找一个自己写的代码跟书上的代码有什么不一样。
再见西城 该用户已被删除
9#
发表于 2015-3-5 23:58:56 | 只看该作者
Java 编程语言的风格十分接近C、C++语言。
精灵巫婆 该用户已被删除
10#
发表于 2015-3-6 19:33:24 | 只看该作者
是一种为 Internet发展的计算机语言
第二个灵魂 该用户已被删除
11#
发表于 2015-3-9 20:45:32 | 只看该作者
接着就是EJB了,EJB就是Enterprise JavaBean, 看名字好象它是Javabean,可是它和Javabean还是有区别的。它是一个体系结构,你可以搭建更安全、更稳定的企业应用。它的大量代码已由中间件(也就是我们常听到的 Weblogic,Websphere这些J2EE服务器)完成了,所以我们要做的程序代码量很少,大部分工作都在设计和配置中间件上。
兰色精灵 该用户已被删除
12#
发表于 2015-3-20 00:53:20 | 只看该作者
科学超级计算机、移动电话和互联网,同时拥有全球最大的开发者专业社群。
小魔女 该用户已被删除
13#
发表于 2015-4-7 16:18:19 | 只看该作者
是一种使网页(Web Page)由静态(Static)转变为动态(Dynamic)的语言
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-12-23 21:03

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表