关于IO包装流中的两个read方法

Posted by & filed under Uncategorized.

刚开始学IO流,会经常感到奇怪,为什么read方法返回的都是int类型,而且,在包装流中经常会弄混淆,看了传智播客老师的视频,加上API文档的了解,总算是完全弄懂了。 下面贴出四个包装流的代码,分别包装了inputstream、outputstream、reader、writer:   [java] view plaincopy public class MyBufferedInputStream extends InputStream {     private InputStream in;     private byte[] buf = new byte[1024];    //自定义字节数组作为缓冲区     private int len = 0;    //定义一个变量,用于记住缓冲区可用字节数量     private int pos = 0;    //定义一个变量,用于记住缓冲区当前可用字节的角标     //通过构造函数组合被包装的流     public MyBufferedInputStream(InputStream in) {         this.in = in;     }     @Override     public int read() throws IOException {         //判断缓冲区是否还有可用字节         if(len==0) {             //一次性填充缓冲区             len = in.read(buf);             //pos要置零             pos = 0;         }         //判断是否到了流的末尾         if(len==-1) {             return -1;         }         //返回一个字节,可用字节就少一个,所以len到减1         len–;         //返回当前可用字节,升级为int,前面加24个0         //11111111 & 00000000 00000000 00000000 11111111 0xff         return buf[pos++]&0xff;     }     public void close() throws IOException {         //关闭底层被包装的流         in.close();     } }     [java] view Read more […]

认识 JavaScript 3

Posted by & filed under Uncategorized.

继承的方式 看到继承方式中,“比较好的”是《JavaScript 设计模式》上的这种。   [javascript] view plaincopyprint? function extend(subClass,superClass){     var F = function(){};     F.prototype = superClass.prototype;     subClass.prototype = new F();     subClass.prototype.constructor = subClass; } 实质是:   [javascript] view plaincopyprint? subclass.prototype.__proto__ = superClass.prototype; 不惜完全覆盖子类原型的原因是,__proto__ 不是标准。     [javascript] view plaincopyprint? subClass.superClass = superClass.prototype 或许还可以加上这句,明确下子类和父类的边界。   多重继承 我想到的多重继承的法子是,在已有原型链尾部插入其他原型。 书上的法子,直接为原型添加父类原型函数副本。   [javascript] view Read more […]

HTML5 Canvas 第二篇

Posted by & filed under Uncategorized.

首先,回顾一下. 页面中加入的canvas   [html] view plaincopyprint? <canvas id=”diag” style=”border:1px solid” width=”200″ height=”200″> </canvas> 相应的绘制对角线的JS代码     [javascript] view plaincopyprint? function draw(){   var canvas = document.getElementById(‘diag’);   var context = canvas.getContext(‘2d’);   context.beginPath();   context.moveTo(70,140);   context.lineTo(140,70);   context.stroke(); } window.addEventListener(“load”, draw, true); 所呈现的图像   OK,这次主要是用一下变换的方式来重新绘制一下.并且用路径绘出树,用曲线绘制出跑道.   2.1 变换 修正—在绘制系统中的说法就是变换.可以将变换当做介于开发人员发出的指令和canvas显示结果之间的一个修正层.不管开发时是否需要,他都是存在的. 在应用时可以被顺序应用、组合或者随意覆盖.关于可重用代码有一条重要的建议:一般绘制都应从原点(0,0)开始,应用变换(缩放、平移、旋转等),然后不断修改代码直至达到希望的效果.   代码:用变换的方式在canvas上绘制对角线   [javascript] view Read more […]

HTML5 Canvas 第一篇

Posted by & filed under Uncategorized.

1.1 What is Canvas? 使用Canvas元素时,它会创建一块矩形区域.默认情况下宽为300像素,高为140像素,但也可自设. 基本的Canvas元素 <canvas></canvas> 页面加入Canvas元素后,我们就可以通过javascript来控制它.可以在其中添加图片、线条、文字,也可以在里面绘图,甚至高级动画. 使用Canvas编程,首先要获取其上下文(context).接着在其中执行动作,最后将这些动作应用到上下文中. 类似于数据库,开发人员先发起一个事务,然后执行某些操作,最后提交这些事务. 1.2 Canvas 坐标 Canvas的坐标是从左上角开始算起,x轴沿着水平方向(按像素)向右延伸,y轴沿垂直方向向下延伸.左上角(x=0,y=0)的点称为原点. 1.3 不适用Canvas的情况 如果其他元素已经够用了,就不应该再使用Canvas元素.例如H1 Read more […]

JAVA 数据类型转换[转]

Posted by & filed under Uncategorized.

最常用的转换无非就是字符串转为数值,数值转为字符串 将字符串转为整数int 有两个方法: 1). int i = Integer.parseInt([String]); 或 i = Integer.parseInt([String],[int radix]); 2). int i = Integer.valueOf(my_str).intValue(); 注: 字串转成 Double, Float, Long 的方法大同小异。 将整数 int 转换成字串 String有三种方法: 1.) String s = String.valueOf(i); 2.) String s = Integer.toString(i); 3.) String s = “” + i; 注: Double, Float, Long 转成字串的方法大同小异。 JAVA中常用数据类型转换函数: string->byte Byte static byte parseByte(String s) byte->string Byte static String toString(byte b)

AJAX原理解析[转]

Posted by & filed under Uncategorized.

一.AJAX简介 Ajax并不是一个新生的语言,它是一系列语言的结合体:HTML/XHTML、CSS、DOM、XML、XSLT、XMLHttp、JavaScript。可以说Ajax涉及的知识面的确是很广的,在Web开发中为我们提供了很方便的交互式用户体验模式。 Ajax技术特点: 1) 页面无刷新 2) 不打断用户的操作,用户的体验好。 3) 按需获取数据,浏览器与服务器之间数据的传输量减少。 4) 是一个标准技术,不需要下载任何的揑件。 5) 可以利用客户端(浏览器)的计算能力。 二.AJAX原理: 以往我们浏览网页的原理是由Client向Server提交页面申请,再由Server将申请通过HTTP传回给Client生成浏览页面: ( 传统web应用模型) 这样处理的结果就是当服务器在处理请求的过程中,用户是一直对着白色窗口等待着的。 当页面加载后,为什么还要让用户每次再花一半的时间从服务取数据?为什么老是让用户看到程序去服务器取数据呢?AJAX恰好弥补了这个缺陷。 使用Ajax后的工作原理如下图,可见通过Ajax在用户交互方面有了很大改进,用户可以不用为提交了Form而长时间等待服务器应答,而且通过Ajax也可以开发出华丽的Web交互页面。 (ajax模型) 那么AJAX是如何做到的呢? 通过在用户和服务器之间引入一个Ajax引擎,可以消除Web的开始-停止-开始-停止这样的交互过程. Read more […]

java hashCode()和equals()的本质区别和联系[转]

Posted by & filed under Uncategorized.

在学习java,根据视频做实例的过程中,对equals和hashcode两个方法理解稍微深刻一点,主要是它们两个很容易混淆,容易出错,自己又通过网上的资料学习,和大家分享 equals()方法 equals是Object类提供的方法之一,众所周知,每一个java类都继承自Object类, 所以说每一个对象都有equals这个方法。而我们在用这个方法时却一般都重写这个方法,why? 先看一个Object类中equals()方法的源代码: [java] view plaincopyprint?在CODE上查看代码片派生到我的代码片 public boolean equals(Object obj) { return (this == obj); } 从这个方法中可以看出,只有当一个实例等于它本身的时候,equals()才会返回true值。通俗地说,此时比较的是两个引用是否指向内存中的同一个对象,也可以称做是否实例相等。而我们在使用equals()来比较两个指向值对象的引用的时候,往往希望知道它们逻辑上是否相等,而不是它们是否指向同一个对象——这就是我们通常重写这个方法的原因。 [java] Read more […]

JAVA 跨平台原理[转]

Posted by & filed under Uncategorized.

反复的听说JAVA是一种跨平台的语言,到底何为跨平台,JAVA又是如何实现跨平台的呢? 先来看一则小故事 最近YY上开设了JAVA俄语班、JAVA英语班、JAVA日语班等等,关于JAVA的系列课程教室。小花是JAVA行业的大牛,于是YY的管理员邀请小花在工作之余,为一些初来乍到的学者们讲课。很多同学听说小花讲课不错,都想听听小花的课,可是问题来了:各位学者来自不同国家,他们大多只懂自己的国语(爱国呀!),而小花只懂汉语,对于英语略懂点(超级爱国者),这怎么办呢?有两种办法,第一,他每次上课前,先准备好演讲稿,各种语言都用自己懂的汉语来标注;第二,每次上课,带个翻译(这个翻译比较列害,八种语言不在话下)。 Read more […]

Linux操作系统文件系统基础知识详解【转】

Posted by & filed under Uncategorized.

一 、Linux文件结构 文件结构是文件存放在磁盘等存贮设备上的组织方法。主要体现在对文件和目录的组织上。 目录提供了管理文件的一个方便而有效的途径。 Linux使用标准的目录结构,在安装的时候,安装程序就已经为用户创建了文件系统和完整而固定的目录组成形式,并指定了每个目录的作用和其中的文件类型。 /根目录 ┃ ┏━━┳━━━┳━━━┳━━━╋━━━┳━━━┳━━━┳━━━┓ ┃   ┃      ┃     ┃     ┃     ┃      ┃     ┃     ┃ bin  home    dev     etc     lib     sbin    tmp      usr    var ┃                               ┃ ┏━┻━┓  Read more […]

c内存管理详解[转]

Posted by & filed under Uncategorized.

  伟大的Bill Gates 曾经失言: 640K ought to be enough for everybody — Bill Gates 1981 程序员们经常编写内存管理程序,往往提心吊胆。如果不想触雷,唯一的解决办法就是发现所有潜伏的地雷并且排除它们,躲是躲不了的。本文的内容比一般教科书的要深入得多,读者需细心阅读,做到真正地通晓内存管理。 1、内存分配方式 内存分配方式有三种: (1)从静态存储区域分配。内存在程序编译的时候就已经分配好,这块内存在程序的整个运行期间都存在。例如全局变量,static变量。 (2)在栈上创建。在执行函数时,函数内局部变量的存储单元都可以在栈上创建,函数执行结束时这些存储单元自动被释放。栈内存分配运算内置于处理器的指令集中,效率很高,但是分配的内存容量有限。 (3) Read more […]