JAVA网页设计Java中的Big/Little成绩
先谈谈我对java的一些认识。我选择java,是因为他语法简单,功能强大,从web,到桌面,到嵌入式,无所不能。但当我进一步了解了java后,感叹,java原来也有许多缺点。成绩Java中的Big/Little成绩1.办理Endian成绩:一个总结
Java二进制文件中的一切工具都以big-endian情势存在,高字节优先,这偶然被称为收集按次。这是一个好的动静,意味着假如你只利用Java。一切文件在一切平台(Mac,PC,Solaris等)上按一样的体例举行处置。能够自在地互换二进制数据,以电子情势在Internet上,或在软盘上,而无需思索endian成绩。存在的成绩是当你与那些不是利用Java编写的程序互换数据文件时,会存在一些成绩。由于这些程序利用的是little-endian按次,一般是在PC上利用的C言语。有些平台外部利用big-endian字节按次(Mac,IBM390);有些平台利用little-endian字节按次(Intel)。Java对用户坦白了endian成绩。
在二进制文件中,在域之间没有支解符,文件是二进制情势的,不成读的ASCII。假如你想读的数据不是尺度格局,一般由非Java程序筹办的。能够由四种选择:
1).重写供应输出文件的输入程序。它能够间接输入big-endian字撙节DataOutputStream大概字符DataOutputSream格局。
2).写一个自力的翻译程序,读和分列字节。能够用任何言语编写。
3).以字节情势读数据,偏重新布置它们(onthefly)。
4).最复杂的体例是,利用我编写的LEDataInputStream,LEDataOutputStream和LERandomAccessFile摹拟DataInputStream,DataOutputStreamandRandomAccessFile,它们利用的是little-endian字撙节。YoucanreadaboutLEDataStream.Youcandownloadthecodeandsourcefree.YoucangethelpfromtheFileI/OAmanuensistoshowyouhowtousetheclasses.Justtellityouhavelittle-endianbinarydata.
2.你大概乃至不会有任何成绩。
从C来的很多Java老手大概会以为必要思索它们所依附的平台外部所利用的是big仍是little成绩。在Java中这不是一个成绩。进一步,不借助于当地类,你没法晓得它们是怎样存储的。JavahasnostructI/Oandnounionsoranyoftheotherendian-sensitivelanguageconstructs.
仅在与遗留的C/C++使用程序通信时必要思索endian成绩。以下代码在bigorlittleendian呆板上都将发生一样的了局:
//take16-bitshortapartintotwo8-bitbytes.
shortx=0xabcd;
bytehigh=(byte)(x>>>8);
bytelow=(byte)x;/*castimplies&0xff*/
System.out.println("x="+x+"high="+high+"low="+low);
3.读Little-EndianBinaryFiles
Themostcommonproblemisdealingwithfilesstoredinlittle-endianformat.
Ihadtoimplementroutinesparalleltothoseinjava.io.DataInputStreamwhichreadsrawbinary,inmyLEDataInputStreamandLEDataOutputStreamclasses.Dontconfusethiswiththeio.DataInputhuman-readablecharacter-basedfile-interchangeformat.
Ifyouwantedtodoityourself,withouttheoverheadofthefullLEDataInputStreamandLEDataOutputStreamclasses,hereisthebasictechnique:
Presumingyourintegersarein2scomplementlittle-endianformat,shortsareprettyeasytohandle:
--------------------------------------------------------------------------------
shortreadShortLittleEndian()
{
//2bytes
intlow=readByte()&0xff;
inthigh=readByte()&0xff;
return(short)(high<<8|low);
}
Orifyouwanttogetcleverandpuzzleyourreaders,youcanavoidonemasksincethehighbitswilllaterbeshavedoffbyconversionbacktoshort.
shortreadShortLittleEndian()
{
//2bytes
intlow=readByte()&0xff;
inthigh=readByte();
//avoidmaskinghere
return(short)(high<<8|low);
}
--------------------------------------------------------------------------------
Longsarealittlemorecomplicated:
--------------------------------------------------------------------------------
longreadLongLittleEndian()
{
//8bytes
longaccum=0;
for(intshiftBy=0;shiftBy<64;shiftBy+=8)
{
//mustcasttolongorshiftdonemodulo32
accum|=(long)(readByte()&0xff)<<shiftBy;
}
returnaccum;
}
--------------------------------------------------------------------------------
Inasimilarwaywehandlecharandint.
--------------------------------------------------------------------------------
charreadCharLittleEndian()
{
//2bytes
intlow=readByte()&0xff;
inthigh=readByte();
return(char)(high<<8|low);
}
--------------------------------------------------------------------------------
intreadIntLittleEndian()
{
//4bytes
intaccum=0;
for(intshiftBy=0;shiftBy<32;shiftBy+=8)
{
accum|=(readByte()&0xff)<<shiftBy;
}
returnaccum;
}
--------------------------------------------------------------------------------
Floatingpointisalittletrickier.PresumingyourdataisinIEEElittle-endianformat,youneedsomethinglikethis:
--------------------------------------------------------------------------------
doublereadDoubleLittleEndian()
{
longaccum=0;
for(intshiftBy=0;shiftBy<64;shiftBy+=8)
{
//mustcasttolongorshiftdonemodulo32
accum|=((long)(readByte()&0xff))<<shiftBy;
}
returnDouble.longBitsToDouble(accum);
}
--------------------------------------------------------------------------------
floatreadFloatLittleEndian()
{
intaccum=0;
for(intshiftBy=0;shiftBy<32;shiftBy+=8)
{
accum|=(readByte()&0xff)<<shiftBy;
}
returnFloat.intBitsToFloat(accum);
}
--------------------------------------------------------------------------------
YoudontneedareadByteLittleEndiansincethecodewouldbeidenticaltoreadByte,thoughyoumightcreateonejustforconsistency:
--------------------------------------------------------------------------------
bytereadByteLittleEndian()
{
//1byte
returnreadByte();
}
--------------------------------------------------------------------------------
4.History
InGulliverstravelstheLilliputianslikedtobreaktheireggsonthesmallendandtheBlefuscudiansonthebigend.Theyfoughtwarsoverthis.Thereisacomputeranalogy.Shouldnumbersbestoredmostorleastsignificantbytefirst?Thisissometimesreferredtoasbytesex.
Thoseinthebig-endiancamp(mostsignificantbytestoredfirst)includetheJavaVMvirtualcomputer,theJavabinaryfileformat,theIBM360andfollow-onmainframessuchasthe390,andtheMotorola68Kandmostmainframes.ThePowerPCisendian-agnostic.
Blefuscudians(big-endians)assertthisisthewayGodintendedintegerstobestored,mostimportantpartfirst.Atanassemblerlevelfieldsofmixedpositiveintegersandtextcanbesortedasifitwereonebigtextfieldkey.Realprogrammersreadhexdumps,andbig-endianisaloteasiertocomprehend.
Inthelittle-endiancamp(leastsignificantbytefirst)aretheIntel8080,8086,80286,PentiumandfollowonsandtheAMD6502popularisedbytheApple][.
Lilliputians(little-endians)assertthatputtingtheloworderpartfirstismorenaturalbecausewhenyoudoarithmeticmanually,youstartattheleastsignificantpartandworktowardthemostsignificantpart.Thisorderingmakeswritingmulti-precisionarithmeticeasiersinceyouworkupnotdown.Itmadeimplementing8-bitmicroprocessorseasier.Attheassemblerlevel(notinJava)italsoletsyoucheatandpassaddressesofa32-bitpositiveintstoaroutineexpectingonlya16-bitparameterandstillhaveitwork.Realprogrammersreadhexdumps,andlittle-endianismoreofastimulatingchallenge.
Ifamachineiswordaddressable,withnofineraddressingsupported,theconceptofendiannessmeansnothingsincewordsarefetchedfromRAMinparallel,bothendsfirst.
5.WhatSexIsYourCPU?
ByteSexEndiannessofCPUs
CPU
EndiannessNotes
AMD6502,Duron,Athlon,Thunderird
little
6502wasusedintheApple][,theDuron,AthlonandThunderbirdinWindows95/08/ME/NT/2000/XP
Apple][6502
little
AppleMac68000
big
UsesMotorola68000
ApplePowerPC
big
CPUisbisexualbutstaysbigintheMacOS.
Burroughs1700,1800,1900
?
bitaddressable.Useddifferentinterpreterfirmwareinstructionsetsforeachlanguage.
Burroughs7800
?
Algolmachine
CDCLGP-30
word-addressableonly,hencenoendianness
31 有时间再研究一下MVC结构(把Model-View-Control分离开的设计思想) 我大二,Java也只学了一年,觉得还是看thinking in java好,有能力的话看英文原版(中文版翻的不怎么好),还能提高英文文档阅读能力。 应用在电视机、电话、闹钟、烤面包机等家用电器的控制和通信。由于这些智能化家电的市场需求没有预期的高,Sun公司放弃了该项计划。随着1990年代互联网的发展 关于设计模式的资料,还是向大家推荐banq的网站 http://www.jdon.com/,他把GOF的23种模式以通俗易懂的方式诠释出来,纯Java描述,真是经典中的经典。 任职于太阳微系统的詹姆斯·高斯林等人于1990年代初开发Java语言的雏形,最初被命名为Oak,目标设置在家用电器等小型系统的程序语言 设计模式是高级程序员真正掌握面向对象核心思想的必修课。设计模式并不是一种具体"技术",它讲述的是思想,它不仅仅展示了接口或抽象类在实际案例中的灵活应用和智慧 Java是一个纯的面向对象的程序设计语言,它继承了 C++语言面向对象技术的核心。Java舍弃了C ++语言中容易引起错误的指针(以引用取代)、运算符重载(operator overloading) 当然你也可以参加一些开源项目,一方面可以提高自己,另一方面也是为中国软件事业做贡献嘛!开发者在互联网上用CVS合作开发,用QQ,MSN,E-mail讨论联系,天南海北的程序员分散在各地却同时开发同一个软件,是不是很有意思呢? Jive的资料在很多网站上都有,大家可以找来研究一下。相信你读完代码后,会有脱胎换骨的感觉。遗憾的是Jive从2.5以后就不再无条件的开放源代码,同时有licence限制。不过幸好还有中国一流的Java程序员关注它,外国人不开源了,中国人就不能开源吗?这里向大家推荐一个汉化的Jive版本—J道。Jive(J道版)是由中国Java界大名 鼎鼎的banq在Jive 2.1版本基础上改编而成, 全中文,增加了一些实用功能,如贴图,用户头像和用户资料查询等,而且有一个开发团队在不断升级。你可以访问banq的网站 象、泛型编程的特性,广泛应用于企业级Web应用开发和移动应用开发。 你现在最缺的是实际的工作经验,而不是书本上那些凭空想出来的程序。 你现在最缺的是实际的工作经验,而不是书本上那些凭空想出来的程序。 如果要向java web方向发展也要吧看看《Java web从入门到精通》学完再到《Struts2.0入门到精通》这样你差不多就把代码给学完了。有兴趣可以看一些设计模块和框架的包等等。 Jive的资料在很多网站上都有,大家可以找来研究一下。相信你读完代码后,会有脱胎换骨的感觉。遗憾的是Jive从2.5以后就不再无条件的开放源代码,同时有licence限制。不过幸好还有中国一流的Java程序员关注它,外国人不开源了,中国人就不能开源吗?这里向大家推荐一个汉化的Jive版本—J道。Jive(J道版)是由中国Java界大名 鼎鼎的banq在Jive 2.1版本基础上改编而成, 全中文,增加了一些实用功能,如贴图,用户头像和用户资料查询等,而且有一个开发团队在不断升级。你可以访问banq的网站 象、泛型编程的特性,广泛应用于企业级Web应用开发和移动应用开发。 Java 不同于一般的编译执行计算机语言和解释执行计算机语言。它首先将源代码编译成二进制字节码(bytecode),然后依赖各种不同平台上的虚拟机来解释执行字节码。从而实现了“一次编译、到处执行”的跨平台特性。 是一种语言,用以产生「小应用程序(Applet(s)) Java是一种计算机编程语言,拥有跨平台、面向对java 我大二,Java也只学了一年,觉得还是看thinking in java好,有能力的话看英文原版(中文版翻的不怎么好),还能提高英文文档阅读能力。
页:
[1]