- 浏览: 319183 次
- 性别:
- 来自: 西安
最新评论
-
yjq8116:
getString 这个方法你有没有试过,是错误的。这段代码被 ...
ByteBuffer和String的互相转换 -
OnlyForJava:
博主,友情的提醒下,你的Ubuntu写错了
Ubutun上配置hadoop,hbase,zookeeper环境并安装
文章列表
(转)ByteBuffer
- 博客分类:
- Java的NIO
缓冲区分配和包装 在能够读和写之前,必须有一个缓冲区,用静态方法 allocate() 来分配缓冲区: ByteBuffer buffer = ByteBuffer.allocate(1024); allocate() 方法分配一个具有指定大小的底层数组,并将它包装到一个缓冲区对象中 — 在本例中是一个 ByteBuffer。 还可以将一个现有的数组转换为缓冲区: byte array[] = new byte[1024]; ByteBuffer buffer = ByteBuffer.wrap(array);
对映射文件的部分加锁
- 博客分类:
- Java的NIO
文件映射通常应用于极大的文件,我们可能需要对这种巨大的文件进行部分加锁,以便其他进程可以修改文件中未被加锁的部分。例如:数据库就是这样,因此多个用户可以同时访问它。
看个例子:连个线程分别对文件的不同部分加锁:
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类并非File
- 博客分类:
- Effective Java
File类这个名字有一定的误导性,可能会认为他代表的是文件。其实不然,他既可以代表一个特定文件的名称,又能代表一个目录下的一组文件的名称。若他指的是一个文件集,我们就可以对此集合调用list()方法,这个方法会返回一个字符串数组。
File类有很多NB的函数,在IDE中看一看就知道。还可以计算出所在磁盘的剩余空间和总空间。诸如这些强大的功能是很多的。
正则表达式剖析
- 博客分类:
- Effective Java
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函数中的就是大名鼎鼎的正则表达式。
...
Java的标准I/O剖析
- 博客分类:
- Effective Java
System.out是一个PrintStream,而PrintStream是一个OutputStream。PrintWriter有一个可以接受OutputStream做为参数的构造器,所以可以将System.out转换成PrintWriter:
PrintWriter writer=new PrintWriter(System.out,true);
writer.println("nihao"+" :wo 是否");
要使用有两个参数的PrintWriter的构造器,并将第二个参数设置为tru ...
初始化问题
- 博客分类:
- Effective Java
1.class Test{
private int num;
void ope(){
num++;
}
}
以上是合法的。
2.class Test{
//private int num;
Java逻辑操作符
- 博客分类:
- Effective Java
Java的逻辑操作符有:与(&&),或(||),非(!)。总共三个。
与C++和C不同的是,不可将一个非布尔值当做布尔值在逻辑表达式中使用。Java的逻辑操作符只可应用于布尔值。例如如下的代码就是不合法的:
int it,em;
boolean bbb = it&&em;
条件操作符的问题
- 博客分类:
- Effective Java
看看一下代码先:
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型的。
十六进制计算问题
- 博客分类:
- Effective Java
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);
输出结果:
...
Arrays的注意事项
- 博客分类:
- Effective Java
在java.util类库中可以找到Arrays类,这个类有着强大的对数组进行操作的能力。Arrays.sort可以对数据进行排序,而Arrays.binarySearch()可以执行快速的查找返回指定元素在数组中的位置,从0开始。但是要注意了:
1.如果要对未排序的数组使用binarySearch()那么将产生不可预料的结果。
System.arraycopy()可以实现数组的拷贝,基本类型数组和对象数组都可以复制。然而,如果复制对象数组,那么只是复制了对象的引用,而不是对象本身的拷贝,这被称作浅复制。
System.arraycopy()不会执行 ...
慎用重载_2
- 博客分类:
- Effective Java
看一个重载造成的恶果:
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
- 博客分类:
- Effective Java
对象的运行时类型并不影响“哪个重载版本将被执行”;选择工作是在编译时候进行的,完全基于参数的编译时类型。
看个例子先:
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 ...