`
文章列表
缓冲区分配和包装 在能够读和写之前,必须有一个缓冲区,用静态方法 allocate() 来分配缓冲区: ByteBuffer buffer = ByteBuffer.allocate(1024); allocate() 方法分配一个具有指定大小的底层数组,并将它包装到一个缓冲区对象中 — 在本例中是一个 ByteBuffer。 还可以将一个现有的数组转换为缓冲区: byte array[] = new byte[1024]; ByteBuffer buffer = ByteBuffer.wrap(array); 
  文件映射通常应用于极大的文件,我们可能需要对这种巨大的文件进行部分加锁,以便其他进程可以修改文件中未被加锁的部分。例如:数据库就是这样,因此多个用户可以同时访问它。 看个例子:连个线程分别对文件的不同部分加锁: package com.wjy.nio; import java.io.FileNotFoundException; import java.io.IOException; import java.io.RandomAccessFile; import java.nio.ByteBuffer; import java.nio.MappedByteBuffer; ...

内存映射文件

     以前一直使用FileInputStream来读取文件,使用FileOurputStream来写文件。今天恍然大悟,RandomAccessFile类可以在初始化的时候设定是用来“读”,还是“写”,还是“又读又写”。这样一来就很方便了,打破了以前只能通过FileInp ...
package com.wjy.nio; import java.io.BufferedInputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.RandomAccessFile; import java.nio.ByteBuffer; import java.nio.ch ...
旧的I/O类库中有三个类被修改了,用以产生FileChannel。来看看他们的例子: package com.wjy.nio; import java.io.BufferedInputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import jav ...
     File类这个名字有一定的误导性,可能会认为他代表的是文件。其实不然,他既可以代表一个特定文件的名称,又能代表一个目录下的一组文件的名称。若他指的是一个文件集,我们就可以对此集合调用list()方法,这个方法会返回一个字符串数组。       File类有很多NB的函数,在IDE中看一看就知道。还可以计算出所在磁盘的剩余空间和总空间。诸如这些强大的功能是很多的。
1.看个小例子先: package com.wjy.pattern; import java.io.PrintWriter; public class Pattern1 { public static void main(String args[]) { PrintWriter out=new PrintWriter(System.out,true); out.println("-1234".matches("(-|\\+)?\\d*")); } }  matches函数中的就是大名鼎鼎的正则表达式。 ...
      System.out是一个PrintStream,而PrintStream是一个OutputStream。PrintWriter有一个可以接受OutputStream做为参数的构造器,所以可以将System.out转换成PrintWriter: PrintWriter writer=new PrintWriter(System.out,true); writer.println("nihao"+" :wo 是否");  要使用有两个参数的PrintWriter的构造器,并将第二个参数设置为tru ...
1.class Test{          private int num;          void ope(){                    num++;              }        } 以上是合法的。 2.class Test{          //private int num;
        Java的逻辑操作符有:与(&&),或(||),非(!)。总共三个。         与C++和C不同的是,不可将一个非布尔值当做布尔值在逻辑表达式中使用。Java的逻辑操作符只可应用于布尔值。例如如下的代码就是不合法的:                              int it,em; boolean bbb = it&&em;  
看看一下代码先: char x='a'; double ii=2.0; System.out.println(true?x:0); System.out.println(false?ii:x);  运行结果:                    a                    97.0 呀呀呀,不应该是两个a吗?原来,条件操作符的第一个操作数和第二个操作数的类型是至关重要的,确保这两个操作数是同类型的是很必要的。否则会出现以上的情况。因为ii是double的,所以在第二个条件操作语句中a被转换成了double型的。
System.out.println(Long.toHexString(0x100000000L+0xcafebabe));  先看看以上代码,感觉答案应该是:1cafebabe。但是答案却是:cafebabe。为什么呢,怎么感觉像是int型变量的相加,第32位的1被舍弃了。看看以下代码就明白了: int hex=0xcafebabe; System.out.printf("hex is: %x\n",hex); System.out.printf("hex is: %x\n",(long)hex);  输出结果:       ...
  在java.util类库中可以找到Arrays类,这个类有着强大的对数组进行操作的能力。Arrays.sort可以对数据进行排序,而Arrays.binarySearch()可以执行快速的查找返回指定元素在数组中的位置,从0开始。但是要注意了:           1.如果要对未排序的数组使用binarySearch()那么将产生不可预料的结果。     System.arraycopy()可以实现数组的拷贝,基本类型数组和对象数组都可以复制。然而,如果复制对象数组,那么只是复制了对象的引用,而不是对象本身的拷贝,这被称作浅复制。    System.arraycopy()不会执行 ...

慎用重载_2

看一个重载造成的恶果: List<Integer> list=new ArrayList<Integer>(); for(int i=-3;i<3;i++){ list.add(i); } for(int i=0;i<3;i++){ list.remove(i); } System.out.println(list); 结果: [-2, 0, 2] 神马情况?竟然不是[-3, ...

慎用重载_1

对象的运行时类型并不影响“哪个重载版本将被执行”;选择工作是在编译时候进行的,完全基于参数的编译时类型。 看个例子先: package com.wjy.multithread; public class MainTest { public static void show(int a){ System.out.println("Integer"); } public static void show(double a){ System.out.println(&q ...
Global site tag (gtag.js) - Google Analytics