本文是《打破国外垄断,开发中国人自己的编程语言》系列文章的第1篇。本系列文章的主要目的是教大家学会如何从零开始设计一种编程语言(marvel语言),并使用marvel语言开发一些真实的项目,如移动App、Web应用等。marvel语言可以通过下面3种方式运行: 1. 解释执行 2. 编译成Java Bytecode,利用JVM执行 3. 编译成二进制文件,本地执行(基于LLVM)
策略模式的核心思想与 if else如出一辙,根据不同的key动态的找到不同的业务逻辑(要执行的函数)。那它就只是如此吗?实际上,我们口中的策略模式其实就是在代码结构上调整,用接口+实现类+分派逻辑来使代码结构可维护性更好。
现在的编程语言越来越复杂,尽管有大量的文档和书籍,这些学习资料仍然只能描述编程语言的冰山一角。而这些编程语言中的很多功能,可能被永远隐藏在黑暗角落。本文将为你解释其中5个Java中隐藏的秘密,可以称其为Java的“黑魔法”。对于这些魔法,会描述它们的实现原理,并结合一些应用场景给出实现代码。
最近在网上看到一道Twitter的算法面试题,网上已经有人给出了答案,不过可能有些人没太看明白(我也未验证是否正确),现在给出一个比较好理解的答案。
本文描述了在使用Java向前引用时容易犯的错误。
摘要: 对于缓冲区来说,最重要的操作就是读写操作。缓冲区提供了两种方法来读写缓冲区中的数据:get、put方法和array方法。而get、put方法可以有三种读写数据的方式:按顺序读写单个数据、在指定位置读写单个数据和读写数据块。除了上述的几种读写数据的方法外,CharBuffer类还提供了用于专门写字符串的put和append方法。在本文及后面的文章中将分别介绍这些读写缓冲区的方法。
摘要: 为了使读者更好地理解非阻塞I/O,本节给出了一个简单的例子用来演示如何将非阻塞I/O应用到网络程序中。读者可以先不必管这个例子的具体细节。因为这个例子的主要目的并不是讲解非阻塞I/O的使用,而是先让读者对非阻塞I/O有一个笼统的感性认识。在看完这个例子后,读者可能会有很多疑问,在本章后面的部分将会逐渐揭开这些迷团。这个例子的主要功能是访问新浪网,并将新浪网的首页在控制台上输出。
摘要: 资源是您在代码中使用到的并且在编译时被打包进您的应用程序的附加文件。Android支持多种不同的文件,包括XML、PNG和JPEG文件。XML文件的格式决定于其描述的内容。这些文件将描述文件支持的类型、语法或格式。
摘要: 在网络应用中,一般可以采用同步I/O(阻塞I/O)和非阻塞I/O两种方式进行数据通讯。这两种方式并非互相排斥和互相取代。我们可以在平时的应用中单独采用其中一种通讯方式,也可以混合使用这两种通讯方式。在本文中就什么是非阻塞I/O以及为什么要使用这种通讯方式进行了介绍,在下一篇文章中给出了一个简单的例子来演示在网络应用中如何使用非阻塞I/O进行通讯。
摘要: 使用ServerSocket类的implAccept方法可以使用accept方法返回一个Socket子类对象。但implAccept是protected方法,因此,必须在ServerSocket类的子类中覆盖accept方法,然后在accept方法中使用implAccept方法重新设置Socket对象。
摘要: ServerSocket类有以下三个选项: 1. SO_TIMEOUT: 设置accept方法的超时时间。 2. SO_REUSEADDR:设置服务端同一个端口是否可以多次绑定。 3. SO_RECBUF:设置接收缓冲区的大小。
摘要: 本文介绍了如何通过getLocalPort、getInetAddress和getLocalSocketAddress方法获得服务端的信息,以及FTP的两种模式:主动模式和被动模式,及其原理。
摘要: 在客户端和服务端的数据交互完成后,一般需要关闭网络连接。对于服务端来说,需要关闭Socket和ServerSocket。在关闭Socket后,客户端并不会马上感知自已的Socket已经关闭,也就是说,在服务端的Socket关闭后,客户端的Socket的isClosed和isConnected方法仍然会分别得到false和true。但对已关闭的Socket的输入输出流进行操作会抛出一个SocketException异常。
在描述算法之前,先看看下面的5*5的表格: 1 3 4 10 11 2 5 9 12 19 6 8 13 18 20 7 14 &n
摘要: 在建立完ServerSocket对象后,通过accept方法返回的Socket对象,服务端就可以和客户端进行数据交互。Socket类和ServerSocket类都有两个得到输入输出流的方法:getInputStream和getOutputStream。对于Socket类而言,使用getInputStream方法得到的InputStream是从服务端获取数据,而getOutputStream方法得到的OutputStream是向服务端发送数据。而ServerSocket的getInputStream和getOutputStream方法也类似。InputStream从客户端读取数据,OutputStream向客户端发送数据。
摘要: ServerSocket类的构造方法有四种重载形式,它们的定义如下: public ServerSocket() throws IOException public ServerSocket(int port) throws IOException public ServerSocket(int port, int backlog) throws IOException public ServerSocket(int port, int backlog, InetAddress bindAddr) throws IOException 在上面的构造方法中涉及到了三个参数:port、backlog和bindAddr。其中port是ServerSocket对象要绑定的端口,backlog是请求队列的长度,bindAddr是ServerSocket对象要绑定的IP地址。
摘要: 在前面的文章曾讨论了HTTP消息头的三个和断点继传有关的字段。一个是请求消息的字段Range,另两个是响应消息字段Accept-Ranges和Content-Range。其中Accept-Ranges用来断定Web服务器是否支持断点继传功能。在这里为了演示如何实现断点继传功能,假设Web服务器支持这个功能;因此,我们只使用Range和Content-Range来完成一个断点继传工具的开发。
摘要: 本文介绍了HTTP消息的学用头字段的功能和用法,如Host、Connection、Range、Date、Content-Length等,本文的需要使用HTTP模拟器进行测试,该模拟器请从如下地址下载:http://files.cnblogs.com/nokiaguy/HttpSimulator.rar
有很多初学者经常搞不清类和对象之间的关系。例如,将在类中定义方法说成是在对象中定义方法。实际上,方法需要在类中定义,而类实例化后,被装载到内存中的就是对象。也就是说,类是静态的,保存在硬盘中的文件,而对象是活动的,要被装载到内存中才能使用。创建对象的过程就相当于将类作为一个母版,然后使用new关键字根据这个母版创建一个个对象。 在现实生活中也有很多类似的例
摘要: 在讨论HTTP协议的具体请求和响应头字段之前,让我们先来利用以前所学的知识来实现一个HTTP模拟器。所谓HTTP模拟器就是可以在用户输入HTTP的请求消息后,由这个模拟器将HTTP请求发送给相应的服务器,再接收服务器的响应消息。这个HTTP模拟器有几下特点: 1. 可以手工输入HTTP请求,并向服务器发送。 2. 接收服务器的响应消息。 3. 消息头和实体内容分段显示,也就是说,并不是象Telnet等客户端一样将HTTP响 应消息全部显示,而是先显示消息头,然后由用户决定是否显示实体内容。 4. 集中发送请求。这个HTTP模拟器和Telnet不同的是,并不是一开始就连接服务器,而是将域名、端口以及HTTP请求消息都输完后,才连接服务器,并将这些请求发送给服务器。这样做的可以预防服务器提前关闭网络连接的现象。 5. 可以循环做上述的操作。
摘要: 当用户在浏览器中输入一个基于HTTP协议的URL时(以http://开头的URL),就相当于通知器按着这个URL组织生成一个HTTP请求,并交过个请求发送到服务器;同时,等待服务器的响应。无论是请求还是响应,都统称为HTTP消息。
摘要: HTTP协议是一种应用层协议,HTTP是HyperText Transfer Protocol(超文本传输协议)的英文缩写。HTTP可以通过传输层的TCP协议在客户端和服务器之间传输数据。HTTP协议主要用于Web浏览器和 Web服务器之间的数据交换。我们在使用IE或Firefox浏览网页或下载Web资源时,通过在地址栏中输入http://host:port /path,开头的4个字母http就相当于通知浏览器使用HTTP协议来和host所确定的服务器进行通讯。
看到最近园里很多人在讨论汇编和IL。忍不住要说两句。先看看什么是汇编。首先要知道的是汇编是和CPU指令有关的。intel和amd CPU的指令集是不一样的(当然,可能有一部分指令是相同的的)。这就要对不同的CPU实现相应的汇编器,汇编器的功能就是将汇编助记符号(象add、mov)翻译成相对某类CPU的机器码,最终生成象exe、dll、s
摘要: 在Socket 类中有很多方法在声明时使用throws抛出了一些异常,这些异常都是IOException的子类。在Socket类的方法中抛出最多的就是 SocketException,其余还有七个异常可供Socket类的方法抛出。这些异常的继承关系如图1所示。其中灰色背景框所描述的例外就是 Socket类的方法可能抛出的异常。
摘要: 在Java类中,getter和setter方法占了很大的比重。由于Java中没有定义属性的关键字;因此,getter和setter方法用于获得和设置Java类的属性值;如getName和setName方法用于设置name属性的值。如果某个属性只有getter方法,那这个属性是只读的;如果只有setter方法,那么这个属性是只写的。在Socket类中也有很多这样的属性来获得和Socket相关的信息,以及对Socket对象的状态进行设置。
摘要: 客户端套接字的超时(timeout)就是指在客户端通过Socket和服务器进行通讯的过程中,由于网络延迟,网络阻塞等原因,造成服务器并未及时响应客户端的一种现象。在一段时间后,客户端由于未收到服务端的响应而抛出一个超时错误; 其中客户端所等待的时间就是超时时间。由于生产超时错误的一端都是被动端;也就是说,这一端是在接收数据,而不是发送数据。对于客户端Socket来说,只有两个地方是在接收数据;一个是在连接服务器时;另一个是在连接服务器成功后,接收服务器发过来的数据时。因此,客户端超时也分为两种类型:连接超时和读取数据超时。
摘要: 发布Java程序(桌面程序)最直接的方法就是将jar文件打包交给用户。不过有时jar文件很多,也很大。为了方便,sun提供了另外一种方式来通过网络发布Java程序。这就是jnlp文件。可能很多读者曾经下载过很多jnlp文件,运行后会自动从指定的网站下载相应的文件。
摘要: 在使用Socket来连接服务器时最简单的方式就是直接使用IP和端口,但Socket类中的connect方法并未提供这种方式,而是使用 SocketAddress类来向connect方法传递服务器的IP和端口。虽然这种方式从表面上看要麻烦一些,但它会给我们带来另外一个好处,那就是网络地址的重用。
摘要: 在上一篇文章中我们讨论了Socket类的基本用法,并给出的例子中使用Socket类连接服务器时使用了一种最简单的连接方式,也就是通过IP和端口号来连接服务器。而为了使连接服务器的方式更灵活,Socket类不仅可以通过自身的构造方法连接服务器,而且也可以通过connect方法来连接数据库。
Copyright © 2005-2025 51CTO.COM 版权所有 京ICP证060544号