自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(16)
  • 收藏
  • 关注

原创 对映射文件的部分加锁

如前面提到的,文件映射通常应用于极大的文件。因此我们可能需要对如此巨大的文件进行部分加锁,以便其他进程可以修改文件中未被加锁的部分。例如,数据库就是这样,因此多个用户可以同时访问到它。下面例子中有两个线程,分别加锁文件的不同部分。//: c12:LockingMappedFiles.java// Locking portions of a mapped file

2013-08-26 11:44:12 609

原创 性能

尽管“旧”的 I/O 流在用 nio 实现后性能有所提高,但是映射文件访问往往可以更加显著地加快速度。下面的程序进行了简单的性能比较。//: c12:MappedIO.java// {Clean: temp.tmp}import java.io.*;import java.nio.*;import java.nio.channels.*;public c

2013-08-26 11:40:56 516

原创 存储器映射文件

存储器映射文件允许我们创建和修改那些因为太大而不能放入内存的文件。有了存储器映射文件,我们就可以假定整个文件都在内存中,而且可以完全把它当作非常大的数组来访问。这种方法极大地简化了用于修改文件的代码。下面是一个小例子://: c12:LargeMappedFiles.java// Creating a very large file using mapping.// {

2013-08-26 11:39:59 601

原创 用缓冲器操纵数据

这个图解阐明了nio 类之间的关系,便于我们理解怎么移动和转换数据。例如,如果我们想把一个字节数组写到文件中去,那么我们就应该使用 ByteBuffer.wrap( )方法把字节数组包装起来,然后用getChannel( )方法在 FileOutputStream 上打开一个通道,接着将来自于 ByteBuffer 的数据写到 FileChannel 中。注意:ByteBuff

2013-08-26 11:39:01 532

原创 Endians

不同的机器可能会使用不同的字节排序方法来存储数据。“Big endian(高位优先)”将最重要的字节存放在地址最低的存储器单元。而”little endian(低位优先)”则是将最重要的字节放在地址最高的存储器单元。当存储量大于一个字节时,像 int,float 等,我们就要考虑字节的顺序问题了。ByteBuffer 是以 Big endian 的形式存储数据的,并且数据在网上传送

2013-08-26 11:35:55 548

原创 动态的 instanceof

Class.isInstance 方法提供了一种动态地调用 instanceof 运算符的途径。于是所有那些单调的 instanceof 语句都可以从 PetCount 例子中移除了。如下所示://: c10:PetCount3.java// Using isInstance()package c10;import com.bruceeckel.simpletest.*;i

2013-08-24 14:04:02 1113

原创 使用类字面常量

学习如何使用类字面常量重写 PetCount.java示例是很有趣的。改写后的结果在各方面都显得更加清晰://: c10:PetCount2.java// Using class literals.package c10;import com.bruceeckel.simpletest.*;import java.util.*;public class PetCou

2013-08-24 14:03:13 621

原创 包访问权限

如果你根本没有给定任何访问权限,例如像本章前面的所有示例,将会出现什么情况呢?默认访问权限没有任何关键字,但通常是指包访问权限(package access,有时也表示成为“friendly”)。这就意味着当前的包中的其他类对那个成员有访问权限,但对于在这个包之外的所有类,这个成员却是 private。由于一个编译单元,即一个文件,只能隶属于一个单一的包,所以经由包访问权限,处于某

2013-08-22 16:23:13 609

原创 Java 访问权限修饰词(access specifier)

public, protected 和      private 这几个 java 访问权限修饰词在使用时,是置于你的类中每个成员的定义之前的,无论它是一个域或是一个方法。每个访问权限修饰词仅控制它所修饰的特定定义的访问权。这一点与 c++截然不同。在 c++中,访问权限修饰词可以控制其后的所有定义,除非另有访问权限修饰词出现。 无论如何,每个定义都需要某种为它指定的访问权

2013-08-22 16:21:57 831

原创 对使用包(Package)的忠告

务必记住,无论何时你创建包,你都已经在给定包的名称的时候隐含地指定了目录结构。这个包必须位于其名称所指定的目录之中,而该目录必须是在以 CLASSPATH 开始的目录中可以查询到的。最初用关键字 package 做实验,可能会有一点不顺,因为除非你遵守“包的名称对应目录路径”的规则,否则你将会受到许多出乎意料的运行时信息,告知无法找到特定的类,哪怕是这个类就位于同一个目录之中。如果

2013-08-22 16:21:23 488

原创 java特点---系统易于表达、易于理解

系统易于表达、易于理解  被设计用来适应问题的“类”,在表达问题的能力上显得更强。这意味着当你编写代码时,你是在用问题空间的术语(“将垫圈放进盒子中”)而不是计算机,也就是解空间的术语(“设置芯片上的一位,表示继电器将被关闭”)来描述解决方案。你可以用更高层的概念来处理问题,并且只用一行代码就可以做更多的事。 易于表达所带来的另一个好处就是易于维护,维护(如果报告可

2013-08-18 11:04:20 652

原创 Java 为什么成功

Java 能够取得如此的成功是因为它在设计时的目标就定位在要解决当今程序员们所面临的众多问题。Java 的基本目标之一就是要提高生产率。生产率来源于许多方面,但是 Java希望在语言方面相对于它前辈有明显的提高,从而为程序员提供更大的便利。

2013-08-18 11:03:30 600

原创 java应用

Java 引起人们的注意很大程度上始于 applet。Java 确实是一种通用的编程语言,至少在理论上可以解决各种用其它语言能够解决的问题。正像前面指出的那样,可能存在其它更有效的方式去解决客户/服务器问题。当你离开 applet的竞技场时(同时也从其限制中解脱了,例如不能写磁盘的限制),你便步入了通用应用系统的世界,这里的系统都是独立运行的,不需要浏览器,就像其它普通程序一样

2013-08-18 11:02:56 446

原创 伴随多态的可互换对象

在处理类型的层次结构时,你经常想把一个对象不要当作它所属的特定类型来对待,而是将其当作其基类的对象来对待。这使得你可以编写出不依赖于特定类型的代码。在 shape 的例子中,方法都是用来操作泛化(generic)形状的,不管它们是圆形、正方形、三角形还是其他什么尚未定义的形状。所有的几何形状都可以被绘制、被擦除、被移动,所以这些方法都是直接对一个 shape 对象发送消息,并不用担

2013-08-16 12:27:48 468

原创 是一个(is-a)与像是一个(is-like-a)关系

对于继承可能会引发某种争论:继承应该只重载基类的方法(而并不添加在基类中没有的新方法)吗?如果这样做,就意味着导出类和基类是完全相同的类型,因为它们具有完全相同的接口。结果你可以用一个导出类对象来完全替代一个基类对象。这可以被视为“纯粹替代(pure substitution)”,通常称之为“替代法则(substitution principle)”。在某种意义上,这是一种处理继承

2013-08-16 12:26:34 1414

原创 继承:复用接口

对象这种观念,本身就是十分方便的工具,使得你可以通过概念(concept)将数据和功能封装到一起,因此你可以对问题域的观念给出恰当的表示,而不用受制于必须使用底层机器语言。这些概念用关键字 class 来表示,形成了编程语言中的基本单位。遗憾的是,这样做还是有很多麻烦,在创建了一个类之后,即使另一个新类与其具有相似的功能,你还是得重新创建一个新类。如果我们能够以现有的类为基础,复制

2013-08-16 12:25:41 879

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除