关于JAVA-IO的一点心得

一.     关于 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功能。此外:
  1. Java 1.1还对InputStream和OutputStream作了新的补充,所以很明显这两个类系并没有被完全替代。
  2. 有时,你还必须同时使用"基于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();……………….
 
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值