- 浏览: 30841 次
- 性别:
- 来自: 西安
最新评论
文章列表
在Java I/O中,抽象类OutputStream是其他输出流类(如FileOutputStream)的基础类,分析一下这个类的源码很有必要。
概要
这个抽象类实现了两个接口:Closeable和Flushable。需要注意的是,在这个类的API中写到这个抽象了实现了三个接口,还包括AutoCloseable,这是因为Closeable接口继承了AutoCloseable接口的缘故。类定义如下:
public abstract class OutputStream implements Closeable, Flushable
该类使用默认的构造函数,没有参数。类中定义了1个抽象方 ...
- 2013-01-30 14:13
- 浏览 244
- 评论(0)
Java语言中,数据类型分为基本类型(primitive)和引用类型两种。注意,这是指在Java语言中,而不是Java虚拟机。在虚拟机内部,数据类型跟Java语言中稍有不同。
如下表:
有一点说明一下,上面的分类标准是根据Java语言规范来的,有些参考书可能不是把char当中整形看待,而是单独列出,请注意理解,建议参看规范。
下面分别介绍:
整型:
整型表示的是没有小数的数值,允许负值。具体内容如下表:
很容易理解。一点说明,这四种类型都是用二进制补码表示的,根据补码的规则就可以算出后面的取值范围。
long类型的需要在后面加个L,例如: ...
- 2013-01-29 14:46
- 浏览 329
- 评论(0)
在Java的I/O类库中,对于输入输出的操作大体上可以分为基于流(stream-based)和基于通道与缓冲(channel and buffer-based).。
类库中的主要Stream类如下:
java.io包中的:
InputStream 和 OutputStream(这是基础的抽象类)
BufferedInputStream 和 BufferedOutputStream
ByteArrayInputStream 和 ByteArrayOutputStream
DataInputStream 和DataOutputStream
FileInputStream 和 FileOu ...
- 2013-01-29 10:57
- 浏览 375
- 评论(0)
Java虚拟机的加载子系统在加载一个类型(类或接口)的时候,主要完成以下三件事:
由一个类型的全限定名查找对应的二进制流(可能class文件,也可能是数据库中的二进制或来自网络的字节流)
根据二进制流转为虚拟机方法区中的运行时数据结构。
在Java堆中生成代表该类型的java.lang.Class对象,作为方法区类型数据的访问入口。
接下来就详细说说方法区中的运行时数据结构具体包括哪一些。在虚拟机规范中,对于方法区的规定十分抽象,因此跟具体的实现有很大的关系。但是一般都具有一些共同的部分。由于虚拟机的方法区使线程共享的,因此访问这些数据必须是线程安全的。根据《深入Java虚拟机》(Bi ...
- 2013-01-28 17:18
- 浏览 239
- 评论(0)
Java中,有时候会不小心出现java.lang.NullPointerException。这篇文章主要介绍一些这个异常类型。
这个异常类型是什么?
先看一下下面的代码:
int x;
x = 10;第一行声明一个int基本类型的变量,Java会将其初始化为0.也就是说,变量x的值就是0。第二行将10写入x所在的内存单元,因为是基本类型,所以即替换到原来的0. Ok,这一切都很顺利,没什么意外。但是,当声明一个引用类型的变量时,变量中存放的不再是真正的值,而是一个引用,例如
Integer num;
num = new Integer(10);
声明语句中,我们声明了一个名为n ...
- 2013-01-26 20:37
- 浏览 374
- 评论(0)
尽管在Java语言中,存在一个“Java虚拟机规范”,规范了Java中每一条指令所能执行的动作以及堆栈的分布做了规范,但是随着技术的发展,高性能虚拟机真正的细节实现方式已经渐渐与虚拟机规范所描述产生越来越大的差距,虚拟机规范中的描述逐渐成了虚拟机实现的“概念模型”——即实现只能保证规范描述等效。基于上面的原因,我们分析程序的执行语义问题(虚拟机做了什么)时,在字节码层面上分析完全可行,但分析程序的执行行为问题(虚拟机是怎样做的、性能如何)时,在字节码层面上分析就没有什么意义了,需要通过其他方式解决。 分析程序如何执行,通过软件调试工具(GDB、Windbg等)来断点调试是最常见的手段,但是这样的 ...
- 2013-01-21 12:51
- 浏览 355
- 评论(0)
Java虚拟机规范中规定了虚拟机必须遵守一些规则,只要符合这些规范,其实现可以完全不同。例如有Oracle官方的Hotspot,IBM的Jikes,Google的安卓虚拟机。这些虚拟机有各自的架构,本文以Hotspot为例介绍虚拟机各个组成部分。
整体架构:
典型的虚拟机架构如下图所示:
主要组件包括:类加载子系统、含有垃圾回收的内存系统、仿真引擎(或者成为执行引擎)
各部分简介
1. 类加载子系统(Class Loaders)
类加载器把含有元数据和指令的类文件(.class,可以是存储在本地的文件,也可以来自网络的二进制流)转化为一个依赖于实现的内存映 ...
- 2013-01-21 11:57
- 浏览 203
- 评论(0)
Internet当中有着无数的标准和规范,其中IETF(因特网工程任务组)中的RFC就达到几千个http://ietfreport.isoc.org/rfc/PDF/,包括http协议,uri等等。最近学习时常常看到参考书上提到各种RFC,每次下载实在有些麻烦,正好在学习相关内容,于是就写了个程序将官网上六千多个pdf文档下载下来。在这里跟大家分享。
整体思路:
首先从RFC列表的页面(http://ietfreport.isoc.org/rfc/PDF/)中解析出各个RFC文件的名称(这其中用到了正则表达式),存放在一个String数组中。
然后遍历整个数组,在遍历的过程当中,用ap ...
- 2013-01-20 22:16
- 浏览 443
- 评论(0)
在比较大型或者特殊的项目中,Java虚拟机默认的堆栈大小时常不够用,因此抛出内存溢出的异常。
利用JDK自带的一些工具,例如Jconsole,可以产看虚拟机的各种状态,当然,启动Jconsole并不是很便捷的事情,尤其是在IDE环境下。这时候可以利用Eclipse来简单查看虚拟机内存状态,具体设置如下:
在参数设置里打开这个功能,勾选Show heap satus,如下图:
然后就可以在界面中看到下图:
90M是最内存最大值,前一个数是目前使用大小。可以点击最右边的小垃圾桶进行手动垃圾回收。
当然,堆大小限制是可以设置的,可 ...
- 2013-01-20 16:10
- 浏览 207
- 评论(0)
当我们按下开机键后,操作系统究竟是如何跑起来的?这个过程详细说来很复杂。这里只简单描述一下。
当机器刚从生产线上下线的时候,里面没有操作系统,称之为裸机。裸机什么事都干不了,于是需要装上操作系统。
机器中固化了一个用于读取磁盘或者其他设备的程序,于是当你在启动时按下F2键,就会执行这个程序安装操作系统。
OS安装好了之后,下次你启动或者重启的时候,由于在机子关闭的时候,CS寄存器被恢复成FFFFH,指令指针IP寄存器恢复成0000H,也就是说你启动之后,CPU将执行的第一条指令位于FFFF0H这个存储单元的代码。如果我们在这个单元放置一条无条件转移指令,让系统执行之后自动进入一 ...
- 2013-01-20 05:20
- 浏览 363
- 评论(0)
声明:本文属于原创作品,转载请注明出处。
本文是关于Java语言对于压缩文件ZIP的一些操作,可以通过流对象ZipInputStream来操作,也可以通过文件对象ZipFile来操作。其中,使用文件对象读写的时候,用到了高数缓存(Cache),文件只打开一次,被重复使用。如果操作过程中,ZIP文件不是经常变化,选择ZipFile性能比较好,如果经常变化在,则更适合选ZipInputStream。具体情况应该具体分析。
下面是一个示例代码,欢迎指正,交流。
import java.io.File;
import java.io.FileInputStream;
import j ...
- 2013-01-19 09:33
- 浏览 217
- 评论(0)
这段时间学习Java类库源码,发现自己对于Java的一些基本特性掌握的不是很好,例如接口与抽象类的一些特性,所以重新翻看《Core Java》,将两者的相关内容整理一下。
转载请注明出处。
————————————————— ...
- 2013-01-18 13:23
- 浏览 191
- 评论(0)
Java中的控制符,用来控制其他类能否访问Java中的某一方法、变量,即控制java类、方法、变量的可见性、可访问性,从而实现数据封装。Java中有两个级别的访问控制符。
类级别:控制其他类能否使用该类。有2中类型: public ...
- 2012-12-26 15:04
- 浏览 584
- 评论(0)
前言:
以下大部分内容我从谷歌上搜索,结合官方的文档总结的。我认为会使用谷歌、会阅读官方的文档非常作用,这里都是最权威的参考。
Java中的Static关键字用的很多,但是总结起来,大概有:Static member、Static Block、Static ...
- 2012-12-25 13:29
- 浏览 279
- 评论(0)
Java Class类理解:
首先,Class是一个java类,跟Java API中定义的诸如Thread、Integer类、我们自己定义的类是一样,也继承了Object(Class是Object的直接子类)。总之,必须明确一点,它其实只是个类,只不过名字比较特殊。更进一步说,Class是一个java中的泛型类型。
对于我们自己定义的类,我们用类来抽象现实中的某些事物,比如我们定义一个名称为Car的类来抽象现实生活中的车,然后可以实例化这个类,用这些实例来表示我的车、你的车、黄的车、红的车等等。
好了,现在回到Class 类上来,这个类它抽象什么了?它的实例又表示什么呢?
在一个运行 ...
- 2012-12-24 11:46
- 浏览 260
- 评论(0)