java中的IO处理

原创 2012年03月26日 17:58:35

-----------------------android培训java培训java学习型技术博客、期待与您交流!----------------------

    Java的I/O系统涉及流的概念,一个读取字节序列的对象被称为输入流,一个写入字节序列的对象称为输出流,程序读入数据,首先打开一个输入流,流以对象的形式存在,数据文件或网络链接信息包装在流对象内部,流对象一旦启动,程序可以从输入流依次读入数据,当程序要输出数据时,就打开一个输出流对象,该对象知道数据的目标文件位置,并将数据依次写入。在Java.io包中有各种流对象,按处理的对象不同可以分为字符流和字节流。
    Java提供了两个处理字节数据的接口InputStream和OutputStream,并提供read()每个实现该类的子类都必须重写该方法,InputStream表示从不同的输入源输入数据的类,可以是字节数组,String对象,类的序列化对象,不同的数据有相应的实现类来操作,其中有2个最常用的子类FileInputStream和FileOutputStream,实现方式如下:
class StreamDemo
{
 public static void main(String[] args)throws IOException
 {
     FileInputStream fis=new FileInputStream("0.jpg");
  FileOutputStream fos=new FileOutputStream("1.jpg");
  int ch;
  while((ch=fis.read())!=-1)
  {
     fos.write((char)ch);
  }
  byte[] buf=new byte[1024];
  int line;
  while((line=fis.read(buf))!=-1)
  {
     fos.write(buf,0,line);
  }//第一种读取字节的方式
/*第二种读取发送,一次读一个数组
        byte[] buf=new byte[fis.available()];
  fis.read(buf);
        fos.write(buf);
        sop(new String(buf));*/
 }}
在Java的IO技术中引用了装饰模式,通过缓冲区提高读取字节的效率,实现方式如下:
BufferedInputStream bis = new BufferedInputStream(new FileInputStream("0.jpg"));
BufferedOutputStream fos=new BufferedOutputStream(new FileOutputStream("1.jpg"));
     为了能简单读取字符数据,Java提供了两个字符流,Reader和Writer接口,两个常用的子类是FileReader和FileWriter,实现方式如下:
public class IODemo {
 public static void main(String[] args)throws IOException {
   BufferedReader br = new BufferedReader(new FileReader("MainClass.java"));
  BufferedWriter wr = new BufferedWriter(new FileWriter("Copy1.txt"));
  String line;
  while((line=br.ReadLine())!=null){//字符缓冲区提供一次读一行的方法
   System.out.println(line);
   wr.write(line);
   wr.newLine();//字符缓冲区提供换行的方法,支持跨平台
  }
  br.close();//数据读写完毕后,流对象必须关闭,避免占用系统资源
  wr.close();
其实字符流底层就是用字节流实现。
       在Java的IO技术中引用了装饰模式,通过缓冲区提高读取字节的效率,实现方式如下:
BufferedInputStream bis = new BufferedInputStream(new FileInputStream("0.jpg"));
BufferedOutputStream fos=new BufferedOutputStream(new FileOutputStream("1.jpg"));
缓冲区的实现原理其实就是在其内部封装一个数组,用一次读写批量数据的方式提高读写效率,在此,简单模拟一个缓冲区,实现相同的功能,
class MyBufferedReader extends Reader{
 private Reader r;
 MyBufferedReader(Reader r){
  this.r = r;
 }
 public void close() throws IOException {
  r.close();
 }
 public int read(char[] cbuf, int off, int len) throws IOException {
  return r.read(cbuf, off, len);
 }
 public String MyReadLine()throws IOException{
     int ch;
  String line;
  char[] a = new char[1024];
  while((ch = r.read(a))!=-1){
   return new String(a,0,ch);
  }
  return null; 
 }
}
    那么如何实现字符流与字节流的转换呢,Java也定义的一种方式就是转换流,他们都是字符流的子类,InputStreamReader(将字节流读到字符流中)和OutputStreamWriter(将字符流写入到字节流中),因为键盘录入的是字节流,所以可用以下实现方式:
    BufferedReader bfr =
                 new BufferedReader(new InputStreamReader(System.in));
   BufferedWriter bfw =
                  new BufferedWriter(new OutputStreamWriter(System.out));
    为了解决各种数据的读写,Java中还提供了其他的流对象,如InpuStream的子类ByteArrayInputStream(字节数组读取流),pipedInputStream(管道流),SequenceInputStream(序列化输入流),StringbufferInputStream(字符串缓冲输入流),ObjectInputStream(对象输入流),FilterInputStream(过滤器输入流),以及对应的输出流;
    实际上Java的IO流处理底层都调用了windows系统资源,所以当读写程序结束后必须调用close方法关闭流,节省资源。

 

 

-----------------------android培训java培训java学习型技术博客、期待与您交流!----------------------

详情请查看:http://edu.csdn.net/heima

 

 

 


 

 

java——io处理大文件

Java读写大文本文件(2GB以上) 如下的程序,将一个行数为fileLines的文本文件平均分为splitNum个小文本文件,其中换行符'r'是linux上的,windows的java换行符是...
  • sinat_24048051
  • sinat_24048051
  • 2017年05月29日 11:43
  • 697

java之IO处理

File文件基础 文件与目录抽象路径名称的表示,其构造方法有四个 File(File parent,String child):从抽象父目录下创建一个File实例。 File(String pa...
  • colin_yjz
  • colin_yjz
  • 2015年07月17日 11:15
  • 5813

IO流---异常处理机制

——- android培训、java培训、期待与您交流! ———- IO异常处理机制 异常就是可以预见的错误,java中所有的异常都从Throwable类中继承, 不过在一般情况下都会由 Exce...
  • movingleft
  • movingleft
  • 2015年06月26日 23:57
  • 1781

IO异常的标准处理方式

/* IO异常的处理方式。 */ import java.io.FileWriter; import java.io.IOException; public class FileWriterD...
  • u012369373
  • u012369373
  • 2015年11月25日 11:31
  • 1417

javaNIO原理(含代码)及与 同步阻塞IO 、伪异步IO比较

一.同步阻塞IO         BIO就是阻塞式的IO,网络通信中对于多客户端的连入,服务器端总是与客户端数量一致的线程去处理每个客户端任务,即,客户端与线程数1:1,并且进行读写操作室阻塞的,当...
  • jiaomingliang
  • jiaomingliang
  • 2015年05月26日 20:06
  • 4127

Java IO之处理流(缓冲流、转换流)

一、处理流:增强功能,提供性能,在节点流之上。二、节点流与处理流的关系节点流(字节流、字符流)处于IO操作的第一线,所有操作必须通过它们进行; 处理流可以对其他流进行处理(提高效率或操作灵活性)。三...
  • scgaliguodong123_
  • scgaliguodong123_
  • 2015年05月23日 18:57
  • 2059

Java NIO 与 IO之间的区别

本文将NIO与IO进行了对比;介绍了NIO的一般使用方式
  • evan_man
  • evan_man
  • 2016年03月17日 09:01
  • 5517

IO流优化处理

file(内存)----输入流---->【程序】----输出流---->file(内存) 当我们读写文本文件的时候,采用Reader是非常方便的,比如FileReader,InputStre...
  • fly12310
  • fly12310
  • 2016年10月26日 09:55
  • 582

java Io操作分类整理(终于不再迷糊了!!!)

下面对学习进行一下简单的总结 。(注图片未上传,想看请下载附件):         IO流主要用于硬板、内存、键盘等处理设备上得数据操作,根据处理数据的数据类型的不同可以分为:字节流(抽象基类为In...
  • itguangit
  • itguangit
  • 2015年12月23日 21:45
  • 1435

深入学习Java IO关闭

写这篇文章主要是本周排查一个问题的时候,看到一段没有正确关闭文件的代码,起初怀疑是这块导致的,最后虽然不是,但是还是有必要学习一下资源关闭的知识。 一.正确关闭资源的方式 在实际开发中,经常需要在程序...
  • liuyang755855737
  • liuyang755855737
  • 2017年03月05日 10:25
  • 689
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:java中的IO处理
举报原因:
原因补充:

(最多只允许输入30个字)