仓酷云

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

[学习教程] JAVA网页设计Java中的Big/Little成绩

[复制链接]
谁可相欹 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-18 11:41:37 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

x
先谈谈我对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
再现理想 该用户已被删除
沙发
发表于 2015-1-20 10:30:09 | 只看该作者
有时间再研究一下MVC结构(把Model-View-Control分离开的设计思想)
灵魂腐蚀 该用户已被删除
板凳
发表于 2015-1-25 22:04:43 | 只看该作者
我大二,Java也只学了一年,觉得还是看thinking in java好,有能力的话看英文原版(中文版翻的不怎么好),还能提高英文文档阅读能力。
冷月葬花魂 该用户已被删除
地板
发表于 2015-1-29 06:52:33 | 只看该作者
应用在电视机、电话、闹钟、烤面包机等家用电器的控制和通信。由于这些智能化家电的市场需求没有预期的高,Sun公司放弃了该项计划。随着1990年代互联网的发展
飘飘悠悠 该用户已被删除
5#
发表于 2015-2-5 22:13:52 | 只看该作者
关于设计模式的资料,还是向大家推荐banq的网站 [url]http://www.jdon.com/[/url],他把GOF的23种模式以通俗易懂的方式诠释出来,纯Java描述,真是经典中的经典。
兰色精灵 该用户已被删除
6#
发表于 2015-2-7 04:31:19 | 只看该作者
任职于太阳微系统的詹姆斯·高斯林等人于1990年代初开发Java语言的雏形,最初被命名为Oak,目标设置在家用电器等小型系统的程序语言
金色的骷髅 该用户已被删除
7#
发表于 2015-2-8 19:25:18 | 只看该作者
设计模式是高级程序员真正掌握面向对象核心思想的必修课。设计模式并不是一种具体"技术",它讲述的是思想,它不仅仅展示了接口或抽象类在实际案例中的灵活应用和智慧
山那边是海 该用户已被删除
8#
发表于 2015-2-9 20:02:49 | 只看该作者
Java是一个纯的面向对象的程序设计语言,它继承了 C++语言面向对象技术的核心。Java舍弃了C ++语言中容易引起错误的指针(以引用取代)、运算符重载(operator overloading)
变相怪杰 该用户已被删除
9#
发表于 2015-2-18 09:02:12 | 只看该作者
当然你也可以参加一些开源项目,一方面可以提高自己,另一方面也是为中国软件事业做贡献嘛!开发者在互联网上用CVS合作开发,用QQ,MSN,E-mail讨论联系,天南海北的程序员分散在各地却同时开发同一个软件,是不是很有意思呢?
莫相离 该用户已被删除
10#
发表于 2015-2-28 06:06:37 | 只看该作者
Jive的资料在很多网站上都有,大家可以找来研究一下。相信你读完代码后,会有脱胎换骨的感觉。遗憾的是Jive从2.5以后就不再无条件的开放源代码,同时有licence限制。不过幸好还有中国一流的Java程序员关注它,外国人不开源了,中国人就不能开源吗?这里向大家推荐一个汉化的Jive版本—J道。Jive(J道版)是由中国Java界大名 鼎鼎的banq在Jive 2.1版本基础上改编而成, 全中文,增加了一些实用功能,如贴图,用户头像和用户资料查询等,而且有一个开发团队在不断升级。你可以访问banq的网站
若天明 该用户已被删除
11#
发表于 2015-3-9 21:25:38 | 只看该作者
象、泛型编程的特性,广泛应用于企业级Web应用开发和移动应用开发。
分手快乐 该用户已被删除
12#
发表于 2015-3-10 21:19:50 | 只看该作者
你现在最缺的是实际的工作经验,而不是书本上那些凭空想出来的程序。
小妖女 该用户已被删除
13#
发表于 2015-3-20 20:12:46 | 只看该作者
你现在最缺的是实际的工作经验,而不是书本上那些凭空想出来的程序。
活着的死人 该用户已被删除
14#
发表于 2015-3-21 23:22:55 | 只看该作者
如果要向java web方向发展也要吧看看《Java web从入门到精通》学完再到《Struts2.0入门到精通》这样你差不多就把代码给学完了。有兴趣可以看一些设计模块和框架的包等等。
老尸 该用户已被删除
15#
发表于 2015-3-22 04:07:53 | 只看该作者
Jive的资料在很多网站上都有,大家可以找来研究一下。相信你读完代码后,会有脱胎换骨的感觉。遗憾的是Jive从2.5以后就不再无条件的开放源代码,同时有licence限制。不过幸好还有中国一流的Java程序员关注它,外国人不开源了,中国人就不能开源吗?这里向大家推荐一个汉化的Jive版本—J道。Jive(J道版)是由中国Java界大名 鼎鼎的banq在Jive 2.1版本基础上改编而成, 全中文,增加了一些实用功能,如贴图,用户头像和用户资料查询等,而且有一个开发团队在不断升级。你可以访问banq的网站
小魔女 该用户已被删除
16#
发表于 2015-3-31 15:23:25 | 只看该作者
象、泛型编程的特性,广泛应用于企业级Web应用开发和移动应用开发。
admin 该用户已被删除
17#
发表于 2015-4-3 20:29:20 | 只看该作者
Java 不同于一般的编译执行计算机语言和解释执行计算机语言。它首先将源代码编译成二进制字节码(bytecode),然后依赖各种不同平台上的虚拟机来解释执行字节码。从而实现了“一次编译、到处执行”的跨平台特性。
谁可相欹 该用户已被删除
18#
 楼主| 发表于 2015-4-10 04:21:36 | 只看该作者
是一种语言,用以产生「小应用程序(Applet(s))
再见西城 该用户已被删除
19#
发表于 2015-4-10 12:01:10 | 只看该作者
Java是一种计算机编程语言,拥有跨平台、面向对java
若相依 该用户已被删除
20#
发表于 2015-4-14 00:45:26 | 只看该作者
我大二,Java也只学了一年,觉得还是看thinking in java好,有能力的话看英文原版(中文版翻的不怎么好),还能提高英文文档阅读能力。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2024-11-15 19:39

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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