您的位置:首页 > 编程语言 > Java开发

JAVA的一些Stream

2013-03-04 10:12 232 查看

JAVA的一些Stream

(2011-06-08 18:55:16)

转载▼

 

分类:
JAVA

来自:http://topic.csdn.net/u/20090428/19/65a41547-a30c-47ae-b587-6317dc68e59c.html

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是他大爷,所以不能拿他和他大爷相比较,哈哈,这么说你明白了吧;

  OutputStreamWriter和OutputStream也是侄子和大爷的关系

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

项目中的例子倒是不少,只是看你是否有心自己去做例子。
比如说:做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){

    extendName=oldName.substring(oldName.lastIndexOf("."));

}

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

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

 

 

 

 

 

 

 

分享: 分享到新浪Qing

喜欢
阅读┊
评论
┊ 收藏
┊转载
┊ 喜欢
打印┊举报

已投稿到:
排行榜

圈子

加载中,请稍候......

前一篇:Android开发:教您如何让Gif动画动起来

后一篇:InputStream,String,File相互转化
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: