输入输出流

Posted aisy绍

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了输入输出流相关的知识,希望对你有一定的参考价值。

一、InputStream 抽象类 

  InputStream是输入字节数据用的类,所以InputStream类提供了3种重载的read方法.Inputstream类中的常用方法: 

  (1) public abstract int read( ):读取一个byte的数据,返回值是高位补0的int类型值。 若返 回值=-1说明没有读取到任何字节读取工作结束。 
  (2) public int read(byte b[ ]):读取b.length个字节的数据放到b数组中。返回值是读取的字节数。该方法实际上是调用下一个方法实现的  
  (3) public int read(byte b[ ], int off, int len):从输入流中最多读取len个字节的数据,存放到偏移量为off的b数组中。  
  (4) public int available( ):返回输入流中可以读取的字节数。 注意:若输入阻塞,当前线程将被挂起,如果InputStream对象调用这个方法的话,它只会返回0,这个方法必须由继承InputStream类的子类对象调用才有用,   
  (5) public long skip(long n):忽略输入流中的n个字节,返回值是实际忽略的字节数, 跳过一些字节来读取  
  (6) public int close( ) :我们在使用完后,必须对我们打开的流进行关闭.  
 

      1) FileInputStream把一个文件作为InputStream,实现对文件的读取操作      
      2) ByteArrayInputStream:把内存中的一个缓冲区作为InputStream使用  
      3) StringBufferInputStream:把一个String对象作为InputStream  
      4) PipedInputStream:实现了pipe的概念,主要在线程中使用  
      5) SequenceInputStream:把多个InputStream合并为一个InputStream

代码:

  public class IOTest {

    static void testOne() throws Exception{
      File file=new File("E:/adb.txt");
      if(file.exists()){
         //构建一个输入流
         InputStream in=new FileInputStream(file);
           int size=in.available();
         System.out.println("文件大小:"+size);
         byte[] bytes=new byte[size];
         in.read(bytes);
         in.close();
         String str=new String(bytes);
         System.out.println("内容:"+str);
      }
    }
 
    static void testTwo() throws Exception{
      File file=new File("E:/adb.txt");
      if(file.exists()){
         //构建一个输入流
         InputStream in=new FileInputStream(file);
         OutputStream out=new FileOutputStream("F:/adb.txt");
         byte[] bytes=new byte[1024];//每次读取1024个字节
         int temp=0;
         while((temp=in.read(bytes))!=-1){
           out.write(bytes);
         }
         //关闭流
       out.flush();
         out.close();
                  in.close();
                  }
     }
     public static void main(String[] args) throws Exception {
        //testTwo();
        testOne();
     }
  }

 二、OutputStream 抽象类 

  OutputStream提供了3个write方法来做数据的输出,这个是和InputStream是相对应的。  
  1. public void write(byte b[ ]):将参数b中的字节写到输出流。  
  2. public void write(byte b[ ], int off, int len) :将参数b的从偏移量off开始的len个字节写到输出流。  
  3. public abstract void write(int b) :先将int转换为byte类型,把低字节写入到输出流中。  
  4. public void flush( ) : 将数据缓冲区中数据全部输出,并清空缓冲区。  
  5. public void close( ) : 关闭输出流并释放与流相关的系统资源。

    1) ByteArrayOutputStream:把信息存入内存中的一个缓冲区中  
        2) FileOutputStream:把信息存入文件中  
        3) PipedOutputStream:实现了pipe的概念,主要在线程中使用  
        4) SequenceOutputStream:把多个OutStream合并为一个OutStream 

    流结束的判断:方法read()的返回值为-1时;readLine()的返回值为null时。

 

以上是关于输入输出流的主要内容,如果未能解决你的问题,请参考以下文章

java Zip压缩输入输出流问题

HTML 输出流啥意思?

C#输入输出流中中文乱码问题

I/O(输入/输出)---字节流与字符流

Java IO中的数据输出流(DataOutputStream)和普通输出流(OutputStre

数据输入/输出流和缓冲输入/输出流有啥区别?