zoukankan      html  css  js  c++  java
  • 2020.7.30

    学习内容:

    1、过滤流 

    通常字节流只具有读写字节内容的方法,它们只能在文件中读取或者向文件中写入字节,在实际开发中往往需要在文件中读取或写入各种类型的数据,如整型、布尔型等数据,就必须先将其他类型的数据转换成字节数组后写入文件,或者从文件中读取到的字节数组转换成其他数据类型,这时就需要包装类,他提供了向各种输出流对象中写入各种类型数据的方法

     DataOutputStream

    必须给它传一个输入流对象,完成类似 DataOutputStream 功能的类就是一个过滤流类或处理流类

    DataOutputStream 包装类的构造函数语法:

    public DataOutputStream(OutputStream out ) 

     例:使用 DataOutputStream 写入内容

    import java.io.IOException;
    import java.io.DataOutputStream;
    import java.io.OutputStream;
    import java.io.FileOutputStream;
    public class DataOutputStreamDemo {
        public static void main(String[] args)throws IOException{
            write();
        }
        public static void write() throws IOException{
    //创建对象 OutputStream out
    =new FileOutputStream("D:\\dataWrite.txt"); DataOutputStream dos=new DataOutputStream(out);
    //写出各种数据 dos.writeInt(
    123); dos.writeBoolean(true); dos.writeByte(34); dos.writeBytes("hello"); dos.writeChar(58); dos.writeChars("good"); dos.writeDouble(13.14); dos.writeFloat(20f); dos.writeShort(31); dos.writeUTF("c++"); dos.writeLong(13L);
    //输出缓冲 dos.flush();
    //关闭 dos.close(); } }

    DatainputStream

    必须给它传一个输出流对象,才能完成过滤流的功能

    例:使用 DatainputStream 读数据

    import java.io.DataInputStream;
    import java.io.IOException;
    import java.io.FileInputStream;
    
    public class DataInputStreamDemo {
        public static void main(String [] args)throws IOException{
            read();
        }
        public static void read()throws IOException{
            FileInputStream in=new FileInputStream("D:/datahello.txt");
            DataInputStream dis=new DataInputStream(in);
            int a=dis.readInt();
            boolean b=dis.readBoolean();
            byte c=dis.readByte();
            char d=dis.readChar();
            double e=dis.readDouble();
            float f=dis.readFloat();
            short g=dis.readShort();
            long h=dis.readLong();
            System.out.println(a);
            System.out.println(b);
            System.out.println(c);
            System.out.println(d);
            System.out.println(e);
            System.out.println(f);
            System.out.println(g);
            System.out.println(h);
            dis.close();
            
        }
    
    }

    2、内存操作流 

    之前的文件操作流是以文件的输入和输出为主的,文件操作流的输出位置是硬盘,但如果将输入输出的位置改变成内存,就称为内存操作流,使用 ByteArrayInputStream 完成内存的输入操作,而使用 ByteArrayOutputStream 完成内存的输出操作

    例:使用内存操作流输出内容

    import java.io.IOException;
    import java.io.ByteArrayInputStream;
    import java.io.ByteArrayOutputStream;
    import java.io.OutputStream;
    import java.io.InputStream;
    
    public class ByteOutputStreamDemo {
        public static void main(String[] args)throws IOException{
            outin();
        }
        public static void outin() throws IOException{
            String info="hello java";
            InputStream in=new ByteArrayInputStream(info.getBytes());
            OutputStream out=new ByteArrayOutputStream();
            int temp=0;
            while((temp=in.read())!=-1) {
                out.write(Character.toUpperCase((char)temp));
            }
            String s=out.toString();
            in.close();
            out.close();
            System.out.println(s);
            
        }
    
    }

    输出结果为:HELLO JAVA

    3、缓冲流 

    缓冲流的原理是将数据先缓冲起来,然后一起写入或读取出来,使用缓冲流读写文件非常高效,常用的缓冲流有以下几种:BufferedReader , BufferedWriter

    BufferedReader 和 BufferedWriter

    BufferedReader 属于字符流,如果要想使用 BufferedReader 就需要将一个字节流变成字符流,为了解决这样的问题,在Java中提供了以下两个转换类:

    将输入的字节流变为字符流:InpurStreamReader

    将输出的字符流变为字节流:OutputStreamWruter

    在 BufferedReader 类中提供了一个专门的读取操作:

    public String readLine ( ) throws IOException

    例:使用 BufferedReader读取内容

    import java.io. BufferedReader;
    import java. io. FileInputStream;
    import java.io. IOException;
    import java.io. Inputst reamReader;
    public class Buf feredReaderDemo {
        public  static void main (String[] args) throws IOException {
              read() ;
        }
        public static void read() throws IOException {
             //创建对象
           BufferedReader read = new BufferedReader (new InputstreamReader (new 
           FileInputStream ("D: /Hello. txt"))) ;
           String line= null;
           //读数据
          while ((line=read. readLine()) !=null) {
               System.out. println(line) ;
          }
          //关闭
          read.close() ;
       }
    }

    例:使用BufferedReader写数据

    import java. io.BufferedWriter;
    import java. io. FileOutputStream;
    import java .io. IOException;
    import java. io. OutputStreamwriter;
    public class BufferedWriterDemo {
       public static void main(String[] args) throws IOException {
            write () ;
       }
        public static void write() throws IOException {
             //创建对象
             BufferedWriter  w= new BufferedWriter (new OutputStreamWriter (new 
             FileOutputStream("D:/Hello.txt"))) ;
             //写数据
             w.write ("Hello") ;
             w. write ("Java") ;
             //关闭
             w.close() ;
         }
    }

    * BufferedInputStream 和 BufferedOutputStream

    使用 BufferedInputStream 和 BufferedOutputStream 通常用来读取或写入影像数据,例如图片、影片等

    例:使用 BufferedInputStream 和 BufferedOutputStream 读写图片

    import java.io.BufferedInputStream;
    import java.io.BufferedOutputStream;
    import java.io.FileInputStream;
    import java.io.FileOutputStream;
    import java.io.IOException;
    public class BufferedInputOutput {
        public static void main(String[] args)throws IOException {
            outIn();
        }
        public static void outIn()throws IOException{
            BufferedInputStream in=new BufferedInputStream(new FileInputStream("F:/test.png"));
            BufferedOutputStream out=new BufferedOutputStream(new FileOutputStream("F:/test2.png"));
            byte[] buf =new byte[1024];
            int len=-1;
            while((len=in.read(buf))!=-1) {
                out.write(buf,0,len);
            }
            out.close();
            in.close();
        }
    }

    明天要学习的内容:

    Scanner类、对象序列化与反序列化、打印流

  • 相关阅读:
    .NET WinForm下StatusStrip控件如何设置分隔线及部分子控件右对齐
    winform 弹出窗体指定位置
    命名空间“System.Web”中不存在类型或命名空间名称“Optimization”(是否缺少程序集引用?)
    SQL之case when then用法详解
    VS2015编译错误:调用的目标发生了异常--->此实现不是Windows平台FLPS验证的加密算法的一部分。
    .NET Core 控制台中文乱码问题!
    IOC 依赖注入 Unity
    《重构:改善代码的既有设计》读书笔记
    .NET中的堆(Heap)和栈(Stack)的本质
    浅谈 Sql Server 游标
  • 原文地址:https://www.cnblogs.com/ltw222/p/13449795.html
Copyright © 2011-2022 走看看