一.
关于
JAVA-IO
的一点心得
<thinking in java 是本好书!>
一.在非格式化的数据访问时,可多用
reader
和
writer
因为:
Reader和
Writer要解决的,最主要的问题就是国际化。原先的I/O类库只支持8位的字节流,因此不可能很好地处理16位的Unicode字符流。Unicode是国际化的字符集(更何况Java内置的char就是16位的Unicode字符),这样加了Reader和Writer之后,所有的I/O就都支持Unicode了。此外新类库的性能也比旧的好。
几乎所有的Java I/O流都有与之对应的,专门用来处理Unicode的Reader和Writer。但有时,面向byte的InputStream和OutputStream才是正确的选择;特别是java.util.zip;它的类都是面向byte的。所以最明智的做法是,先用Reader和Writer,等到必须要用面向byte的类库时,你自然会知道的,因为程序编译不过去了。
Reader
的一些应用:
1.
输入从屏幕输入一行字符串:
BufferedReader in=new BufferedReader(new InputStreamReader(System.in));
String str=in.readLine();
1.
从一个文件中读取数据
BufferedReader in=new BufferedReader(newFileReader(“E://liangjingbo.txt”));
String str2,str1=new String();
While((str2=in.readLine())!=null)//
非常的重要!编程的好风格!
Str1+=str2+”/n”;
2.
自定义的输入类
StreamTokenizer in= new StreamTokenizer(new BufferedReader(new InputStream(System.in)));
Int type; type=in.nextToken();
a.
is number type==in.TT-NUMBER
放在-》in.nval(double)
b.
is Word type==in.TT-WORD
放在-》in.sval(String)
3.
使用StringReader
StringReader ins=StringReader(“liangjingbo/n is good student!”);
Int c;
While((c=ins.read())!=-1)
System.out.println((char)c);
Writer
的一些应用:
1.
以行为单位写文件时:
PrintWriter outp=new PrintWriter(new BufferWriter(new FileWriter(“liang.txt”)));
String str=”haha”;
out.println(str);
out.close();
2.
以行为单位写文件的第2种方法:
BufferedWriter outp=new BufferedWriter(new FileWriter(“liang.txt”));
String str=”haha”;
Outp.newLine();
Outp.write(str);
Outp.flush();
Outp.close();
注意事项:
System.in
它本身是一个 InputStream object
System.out
它本身是一个 PrintStream object
System.err
它也是一个 PrintStream object
所以,可以用printWriter 来包装 err 和out 这些printStream
二.在格式化的数据访问时,还要用
inputstream
和
outputstream
因为:
Java 1.1对最底层的
I/O流类库作了重大修改。第一次看到Reader和Writer的时候,你会觉得"它们大概是用来取代InputStream和OutputStream的"。但事实并非如此。虽然InputStream和OutputStream的某些功能已经淘汰了(如果你继续使用,编译器就会发警告),但它们仍然提供了很多很有价值的,面向byte的I/O功能,而Reader和Writer则提供了Unicode兼容的,面向字符的I/O功能。此外:
- Java 1.1还对InputStream和OutputStream作了新的补充,所以很明显这两个类系并没有被完全替代。
- 有时,你还必须同时使用"基于byte的类"和"基于字符的类"。为此,它还提供了两个"适配器(adapter)"类。InputStreamReader负责将InputStream转化成Reader,而OutputStreamWriter则将OutputStream转化成Writer。
但是,访问的是格式化的文件时,我们要使用 操作byte[]的io流。
类如,拷贝文件:
1. try{
FileInputStream in=new FileInputStream(new File(from));
FileOutputStream out=new FileOutputStream(to+"//ha.Mp3");
/* byte buff[]=new byte[in.available()];
in.read(buff);*/
byte buff[]=new byte[256];
int s;
while((s=in.read(buff))>=0)//
非常重要的设计方法,要学会。
{
out.write(buff,0,s);
}
out.close();
in.close();
}catch(IOException e){}
2.
利用reader .writer
来操作文件只限于这个文件是个String
型的文件
3.
ObjectOutputStream ObejectInputStream
他们可以操作任何对象,所以很是有用。
例如。
1.ObjectOutputStream out=new ObjectOutputStream(Socket.getOutputStream);
2.ObjectOutputStream out=new ObjectOutputStream(new FileOutputStream(“File”));
Out.readObject();……………….