java输入与输出的学习

 Java   IO的一般使用原则:  
   
  一、按数据来源(去向)分类:  
  1、是文件:   FileInputStream,   FileOutputStream,   FileReader,   FileWriter  
  2、是byte[]:ByteArrayInputStream,   ByteArrayOutputStream  
  3、是Char[]:   CharArrayReader,   CharArrayWriter  
  4、是String:   StringBufferInputStream,   StringReader,   StringWriter  
  5、网络数据流:InputStream,   OutputStream,   Reader,   Writer   

writer inputstream 在前面加上一些file ,byte[],char[],string,网络数据流是最原始的。

dataoutputstream datainputstream,以便读取或写入各种类型的数据
    
  二、按是否格式化输出分:  
  1、要格式化输出:PrintStream,   PrintWriter  
   
  三、按是否要缓冲分:  
  1、要缓冲:BufferedInputStream,   BufferedOutputStream,   BufferedReader,   BufferedWriter  
   
  四、按数据格式分:  
  1、二进制格式(只要不能确定是纯文本的):   InputStream,   OutputStream及其所有带Stream结束的子类  
  2、纯文本格式(含纯英文与汉字或其他编码方式);Reader,   Writer及其所有带Reader,   Writer的子类  
   
  五、按输入输出分:  
  1、输入:Reader,   InputStream类型的子类  
  2、输出:Writer,   OutputStream类型的子类  
   
  六、特殊需要:  
  1、从Stream到Reader,Writer的转换类:InputStreamReader,   OutputStreamWriter  
  2、对象输入输出:ObjectInputStream,   ObjectOutputStream  
  3、进程间通信:PipeInputStream,   PipeOutputStream,   PipeReader,   PipeWriter  
  4、合并输入:SequenceInputStream  
  5、更特殊的需要:PushbackInputStream,   PushbackReader,   LineNumberInputStream,   LineNumberReader  
   
  决定使用哪个类以及它的构造进程的一般准则如下(不考虑特殊需要):  
  首先,考虑最原始的数据格式是什么:   原则四  
  第二,是输入还是输出:原则五  
  第三,是否需要转换流:原则六第1点  
  第四,数据来源(去向)是什么:原则一  
  第五,是否要缓冲:原则三   (特别注明:一定要注意的是readLine()是否有定义,有什么比read,   write更特殊的输入或输出方法)  
  第六,是否要格式化输出:原则二  
   
  每一步下来就可以把你的选择缩小一些,构造的过程也基本上就是这样,举一例说明:  
  java   servlet来处理一个上传文件的页面:    
  <form   action="/servlet/upload"   method="post"   enctype="multipart/form-data">    
  .....    
  </form>  
   
  public   void   doPost(HttpServletRequest   request,   HttpServletResponse   response)   throws   ServletException,   IOException   {  
          response.setContentType("text/html");  
          PrintWriter   out   =   new   PrintWriter   (         //   原则五  
          response.getOutputStream()     //   原则四及原则一第5点  
          );  
          out.println("<html>");  
          out.println("<head><title>ShowFormdata</title></head>");  
          out.println("<body>");  
          out.println("<hr>");  
          out.println(request.getContentType());  
          out.println("<pre>");  
          BufferedInputStream   in   =   new   BufferedInputStream(     //   原则三  
          request.getInputStream()     //   原则四及原则一第5点  
          );  
          int   c;  
          while((c=in.read())!=-1)  
              out.write(c);     //   此处特别注意的是:虽然我用了writer作为输出,但我一样可以用write这个简单的接口来作实际输出  
              //   究其原因:我的输入根据原则四只能用read,所以决定了我的输出方式  
          out.println("</pre>");  
          out.println("</body></html>");  
          out.close();  
  }  
   
  这个例子可能不太准确,甚至可以说有错误,但可以说明一些以上所述的问题。  
  纯属个人经验,有兴趣可以与我探讨。   luodi@szonline.net

一.在   JDK   1.0   中,通常是用   InputStream   &   OutputStream   这两个基类来进行读写操作的。    
  InputStream   中的   FileInputStream   类似一个文件句柄,通过它来对文件进行操作,类似的,在      
  OutputStream   中我们有   FileOutputStream   这个对象。    
   
  用FileInputStream   来读取数据的常用方法是:    
  FileInputStream   fstream   =   new   FileInputStream(args[0]);    
  DataInputStream   in   =   new   DataInputStream(fstream);    
  用   in.readLine()   来得到数据,然后用   in.close()   关闭输入流。    
   
  用FileOutputStream   来写入数据的常用方法是:    
  FileOutputStream   out   out   =   new   FileOutputStream("myfile.txt");            
  PrintStream   p   =   new   PrintStream(   out   );    
  用   p.println()   来写入数据,然后用   p.close()   关闭输入。    
   
  二.在   JDK   1.1中,支持两个新的对象   Reader   &   Writer,   它们只能用来对文本文件进行操作,而      
  JDK1.1中的   InputStream   &   OutputStream   可以对文本文件或二进制文件进行操作。    
   
  用FileReader   来读取文件的常用方法是:    
  FileReader   fr   =   new   FileReader("mydata.txt");    
  BufferedReader   br   =   new   BufferedReader(fr);      
  用   br.readLing()   来读出数据,然后用br.close()   关闭缓存,用fr.close()   关闭文件。    
   
  用   FileWriter   来写入文件的常用方法是:    
  FileWriter   fw   =   new   FileWriter("mydata.txt");    
  PrintWriter   out   =   new   PrintWriter(fw);        
  在用out.print   或   out.println   来往文件中写入数据,out.print   和   out.println的唯一区别是后者写    
  入数据或会自动开一新行。写完后要记得   用out.close()   关闭输出,用fw.close()   关闭文件。

补充两句:  
  除了上面说的两个类,其他还有不少类。比如BufferedInputStream,DataInputStream.这些类都是遵照装饰器(decorate   好像是这样拼的)模式设计的。具体参看设计模式。这些类是给基本的输出输入流来添加功能的。比如new   BufferedInputStream(new   FileInputStream(a   file))就给文件输入流增加了缓冲功能。这样设计的好处是不必生成一大堆子类。而可以用少数的几个类来组合出各种功能。看过<设计模式>的话就可以理解到这样设计的好处了。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值