JAVA的一些Stream



1.InputStream
字节输入流的所有类的超类,一般我们使用它的子类,如FileInputStream,DataInputStream等.
2.OutputStream
输出字节流的所有类的超类,与InputStream对应,它的子类名与上面对应.
3.InputStreamReader
字节流通向字符流的桥梁,它将字节流转换为字符流.
4.OutputStreamWriter
是字符流通向字节流的桥梁,它将字符流转换为字节流.

------------------------

首先告诉你两个概念:字符流:你可以把它理解为字符串;字节流:你可以把它理解为二进制流
其次纠正一下你的问题;InputStream和InputStreamReader是没有可比性的!
  与InputStream相对应的是Reader,InputStream是处理字节流的抽象类,Reader是处理字符流的抽象类,两个抽象类中最主要的方法都是read()方法;
  同理,与OutputStream相对应的抽象类是Writer,两个抽象类中最主要的方法是writer()
最后告诉你:InputStreamReader是Reader的一个子类,Reader是他爹,InputStream是他大爷,所以不能拿他和他大爷相比较,哈哈,这么说你明白了吧;
 

-----------------------

项目中的例子倒是不少,只是看你是否有心自己去做例子。
比如说:做Web开发的时候,FLEX或是AJAX请求服务端一个URL,请求的信息是XML的流文件。
就可以用request.getInputStream()来接收,对流文件进行处理。

Java code
byte[] buffer=newbyte[128];
intlen=0;
InputStream inputStream=request.getInputStream();
ByteArrayOutputStream bytes=newByteArrayOutputStream();
while((len=inputStream.read(buffer))>=0)
{
bytes.write(buffer,0, len);
}
System.out.println(bytes.toString());
-------------------------------
看看我通过FileInputStream进行文件上传的例子:
Java code
importjava.io.BufferedOutputStream;
importjava.io.File;
importjava.io.FileOutputStream;
importjava.text.SimpleDateFormat;
importjava.util.Date;
importjavax.servlet.http.HttpServletRequest;
importjavax.servlet.http.HttpServletResponse;
importorg.apache.struts.action.Action;
importorg.apache.struts.action.ActionForm;
importorg.apache.struts.action.ActionForward;
importorg.apache.struts.action.ActionMapping;
importorg.apache.struts.upload.FormFile;
importcom.myStruts.form.UploadForm;
publicclassFileUploadActionextendsAction{
privatestaticfinalSimpleDateFormatdateFormat=newSimpleDateForma("yyyyMMddHHmmssSSS");
@Override
publicActionForward execute(ActionMapping mapping,ActionForm form,
   HttpServletRequestrequest, HttpServletResponse response)throwsException{
if(((UploadForm)form).getFormFile()!=null){
//获得保存文件的FormFile对象
FormFile formFile=(FormFile)((UploadForm)form).getFormFile();
 
 
// 处理文件名 //
String oldName=formFile.getFileName();
String extendName="";
if(oldName.lastIndexOf(".")!=-1){
  
}
String newName=dateFormat.format(newDate())+extendName;
 
 
// 进行读写操作 //
File uploadFile=newFile(newName);
BufferedOutputStream bufOut=newBufferedOutputStream(newFileOutputStream(uploadFile));
byte[]totalBytes=formFile.getFileData();
bufOut.write(totalBytes);
bufOut.flush();
bufOut.close();
}
returnmapping.findForward("upload_success");
}
}

记住,Java提供了很多类处理各种输入输出,它们分别是处理字节流,字符流,文件流,数据流,对象流的类,一般我们用的最多的就是字节流,字符流,文件流处理类

------------------------------

概念什么的比较麻烦,可以这么理解

FileInputStream fis = new FileInputStream("c:/a.txt"); 设置读取文件的路径,只是指向文件所在位置,并不做操作,可以通过fis.read()将文件内容读出来

FileOutputStream out=new FileOutputStream("c://b.txt"); 设置写入文件的路径,同上,只是将设置要将文件写入到什么位置,给出路径而已

PrintStream p=new PrintStream(out); 将文件写入到给出的位置

Reader与Writer同上面一样,只是读写字符,不是字节

 FileReader fr=new FileReader("c:/a.txt"); 设置文件路径

 BufferedReader br=new BufferedReader(fr); 读取文件


 FileWriter fw=new FileWriter("c://b.txt"); 设置写入路径

 PrintWriter out=new PrintWriter(fw); 写入,PrintWriter(Filename)使用指定文件创建不具有自动行刷新的新 PrintWriter-----------------------------------------