Java编程那些事儿——计算机内部的数据表达html
Java, JDK, Java编译器, Javac, Java基础程序员
1.3 计算机内部的数据表达 计算机内部数据表达的总原则就是:把一切内容数值化、数字化。这个也是编程时处理数据的基本方式,对于编程理解的越深刻,则将越认同该原则。 其实计算机也只能这样,由于计算机内部只能存储0和1两个数字,因此必须把指令、数据、图片、文本等各类各样的内容数字化成0和1进行存储、传输和显示。 1.3.1 整数的表达 整数有正负之分,可是计算机内部只能存储0和1,则计算机内部将符号数字化,用二进制码的最高位表明符号位,规定该位为0表明正,1表明负。这就是符号数字化的规定。 前面介绍过整数在计算机内部都是以二进制的形式保存的。可是为了计算方便,以及简化CPU的结构,因此在存储和运算时都采用补码的形式。 前面介绍的那些直接计算出来的二进制形式,都称做整数的原码。规定正数的原码、反码和补码都是自身。 而对于负数,仔细研究一下其组成格式。以8位机为例,也就是一个数字占计算机中的8位,也就是一个字节,用最高位存储符号位,其它的位存储数值。例如-8的原码是10001000,最高位的1表明负数,后续的7位表明数值。 负数的反码是指符号位不变,其余的位取反,也就是0变1,1变0,则-8的反码是11110111.负数的补码是指在反码的数值位上加1,运算后获得的结果,只计算数值位,不改变符号位。则-8的补码是11111000,该次运算中,低位向高位进行了进位。 规律:补码的补码等于负数的原码。 也就是对负数的补码再求补,则获得的负数的原码。 熟悉整数的表达,对于后续理解数据的区间以及进行强制转换之后获得的数值颇有帮助,也是进行位运算的基础。 备注:小数,编程语言中称浮点数,的存储形式和整数不一样。 1.3.2 字符的表达 字符指计算机内部单个的符号,如标点符号、英文字母和汉字等等。由于这些字符种类各异,计算机没法直接表达,那么就采用了计算机编程中也经常使用的方式,对每一个字符进行编号,例如规定a字符编号为97,b字符编号为98等等。 因为须要编号的字符不少,就专门规定了一系列字符和编号的对应规则,那么这些对应表就被称做字符集,常见的字符集有ASCII、GB23十二、BIG5等。 在计算机内部存储、运算和传输时,都只须要使用该编号便可。 字符集比较完美的解决了字符的存储和传输的问题。 因此字符在程序内部能够参与运算,其实参与运算的就是这个字符的编号,字符集规律是不少字符变换逻辑实现的基础。 备注:字符的显示则经过专门的字符显示码实现。 1.3.3 总结 其实计算机内部全部的东西都是以数字的形式存储的,这里只是但愿经过这两种简单的结构,使你们了解将数据数字化的思想,这是编程时经常使用的思想之一。编程 |
Java编程那些事儿——网络编程基础服务器
Java, JDK, Java编译器, Javac, Java基础网络
对于初学者,或者没有接触过网络编程的程序员,会以为网络编程涉及的知识很高深,很难,其实这是一种误解,当你的语法熟悉之后,其实基本的网络编程如今已经被实现的异常简单了。 1.4.1 网络编程是什么? 网络编程的本质是两个设备之间的数据交换,固然,在计算机网络中,设备主要指计算机。数据传递自己没有多大的难度,不就是把一个设备中的数据发送给两外一个设备,而后接受另一个设备反馈的数据。 如今的网络编程基本上都是基于请求/响应方式的,也就是一个设备发送请求数据给另一个,而后接收另外一个设备的反馈。 在网络编程中,发起链接程序,也就是发送第一次请求的程序,被称做客户端(Client),等待其余程序链接的程序被称做服务器(Server)。客户端程序能够在须要的时候启动,而服务器为了可以时刻相应链接,则须要一直启动。例如以打电话为例,首先拨号的人相似于客户端,接听电话的人必须保持电话畅通相似于服务器。 链接一旦创建之后,就客户端和服务器端就能够进行数据传递了,并且二者的身份是等价的。 在一些程序中,程序既有客户端功能也有服务器端功能,最多见的软件就是BT、emule这类软件了。 下面来谈一下如何创建链接以及如何发送数据。 1.4.2 IP地址和域名 在现实生活中,若是要打电话则须要知道对应人的电话号码,若是要寄信则须要知道收信人的地址。在网络中也是这样,须要知道一个设备的位置,则须要使用该设备的IP地址,具体的链接过程由硬件实现,程序员不须要过多的关心。 IP地址是一个规定,如今使用的是IPv4,既由4个0-255之间的数字组成,在计算机内部存储时只须要4个字节便可。在计算机中,IP地址是分配给网卡的,每一个网卡有一个惟一的IP地址,若是一个计算机有多个网卡,则该台计算机则拥有多个不一样的IP地址,在同一个网络内部,IP地址不能相同。IP地址的概念相似于电话号码、身份证这样的概念。 因为IP地址不方便记忆,因此有专门创造了域名(Domain Name)的概念,其实就是给IP取一个字符的名字,例如163.com、sina.com等。IP和域名之间存在必定的对应关系。若是把IP地址类比成身份证号的话,那么域名就是你的姓名。 其实在网络中只能使用IP地址进行数据传输,因此在传输之前,须要把域名转换为IP,这个由称做DNS的服务器专门来完成。 因此在网络编程中,可使用IP或域名来标识网络上的一台设备。 1.4.3 端口的概念 为了在一台设备上能够运行多个程序,人为的设计了端口(Port)的概念,相似的例子是公司内部的分机号码。 规定一个设备有216个,也就是65536个端口,每一个端口对应一个惟一的程序。每一个网络程序,不管是客户端仍是服务器端,都对应一个或多个特定的端口号。因为0-1024之间多被操做系统占用,因此实际编程时通常采用1024之后的端口号。 使用端口号,能够找到一台设备上惟一的一个程序。 因此若是须要和某台计算机创建链接的话,只须要知道IP地址或域名便可,可是若是想和该台计算机上的某个程序交换数据的话,还必须知道该程序使用的端口号。 1.4.4 数据传输方式 知道了如何创建链接,下面就是如何传输数据了,先来看一下数据传输的方式。 在网络上,不论是有线传输仍是无线传输,数据传输的方式有两种: <!——[if !supportLists]——>l <!——[endif]——>TCP(Transfer Control Protocol) 传输控制协议方式,该传输方式是一种稳定可靠的传送方式,相似于显示中的打电话。只须要创建一次链接,就能够屡次传输数据。就像电话只须要拨一次号,就能够实现一直通话同样,若是你说的话不清楚,对方会要求你重复,保证传输的数据可靠。 使用该种方式的优势是稳定可靠,缺点是创建链接和维持链接的代价高,传输速度不快。 <!——[if !supportLists]——>l <!——[endif]——>UDP(User Datagram Protocol) 用户数据报协议方式,该传输方式不创建稳定的链接,相似于发短信息。每次发送数据都直接发送。发送多条短信,就须要屡次输入对方的号码。该传输方式不可靠,数据有可能收不到,系统只保证尽力发送。 使用该种方式的优势是开销小,传输速度快,缺点是数据有可能会丢失。 在实际的网络编程中,你们能够根据须要选择任何一种传输方式,或组合使用这两种方式实现数据的传递。 1.4.5 协议的概念 协议(Protocol)是网络编程中一个很是重要的概念,指的是传输数据的格式。由于你们在网络中须要传输各类各样的信息,在程序中得到到的都是一组数值,如何阅读这些数值呢,就须要提早规定好这组数据的格式,在客户端按照该格式生成发送数据,服务器端按照该格式阅读该数据,而后在按照必定的格式生成数据反馈给客户端,客户端再按照该格式阅读数据。现实中相似的例子就是电报编码,每一个数字都是用特定的数据表达。 通常程序的协议都分红客户端发送的数据格式,以及服务器端反馈的数据格式,客户端和服务器端都遵循该格式生成或处理数据,实现二者之间的复杂数据交换。 1.4.6 小结 网络编程就是使用IP地址,或域名,和端口链接到另外一台计算机上对应的程序,按照规定的协议(数据格式)来交换数据,实际编程中创建链接和发送、接收数据在语言级已经实现,作的更多的工做是设计协议,以及编写生成和解析数据的代码罢了,而后把数据转换成逻辑的结构显示或控制逻辑便可。编程语言 了解更多详情请登陆超人学院网站http://www.crxy.cn或者每周日晚八点半相约免费公开课 https://ke.qq.com/course/53102#term_id=100145289 具体详情请联系QQ2435014406网站 |