数据流_小记

来源:互联网 发布:js 字段包含某些值 编辑:程序博客网 时间:2024/06/14 07:57

输入流

输出流

数据流:针对最底层的数据,进行最基本的字节字符数据的读写操作。

构造方法:

public DataInputStream(InputStream in);//基础的InputStraeam构建DataInputStreampublic DataOutputStream(OutputStream out);//基础的OutputStraeam构建DataOutputStream

写入字符串:

writeBytes(String S)字节writeChars(String S)字符writeUTF

ByteArrayInputStream和ByteArrayOutStream(重点)
内存操作流:针对内存的数据进行操作的,程序一结束,这些内存中的数据就消失掉了!
特点:针对小文件进行操作!(聊天室项目中使用它进行发送文件)

ByteArrayOutputStream:public ByteArrayOutputStream():创建默认的缓冲区大小的内存操作输出流(单位是字节)成员方法:public byte[] toByteArray()创建一个新分配的 byte 数组(将内存操作输出流对象转换成字节数组)void reset():重置内存操作输出流ByteArrayInputStream:内存操作输入流:public ByteArrayInputStream(byte[] buf):参数数一个字节数组(缓冲数组)
package Day19_DataInOutput;import java.io.ByteArrayInputStream;import java.io.ByteArrayOutputStream;import java.io.IOException;/** * @author Aoman_Hao */public class ByteArrayTest1 {    public static void main(String[] args) throws IOException {        // 创建一个新的字节数组输出流,缓冲区大小为默认大小(一字节8位)        ByteArrayOutputStream bao = new ByteArrayOutputStream();        bao.write("hello".getBytes());        System.out.println(bao);        bao.close();// close无定义,即此流可以不关闭        // 创建一个字节数组输入流        byte[] by = bao.toByteArray();        ByteArrayInputStream bai = new ByteArrayInputStream(by);        int len = 0;        while((len =  bai.read())!=-1){            System.out.print((char)len);        }        bai.reset();//重置流    }}

处理流–隐藏了底层设备上节点流的差异,对外提供方便的输入输出方法,使用处理流包装节点流,程序通过处理流来执行输入输出功能,让节电流和底层的IO设备文件交互.
处理流的构造器参数不是物理节点,而是存在的流
打印流:
字节打印流:PrintStream
字符打印流:PrintWriter

 *  打印流特点:1)在复制文件的,打印流不能操作数据源,只能操作目的地的数据(只能输出数据)2)打印流可以有自动刷新的功能3)打印流可以直接针对文本文件进行操作: *           * 什么情况下是直接可以针对文本文件进行操作? *          查API的时候,看流中构造方法,只要构造方法的参数有File类或者是String类型,都可以针对文本文件进行操作 *          FileInputStream *          FileOutputStream *          FileReader *          FileWriter *           * PrintWriter: *      构造方法: *          public PrintWriter(String fileName)
package Day19_DataInOutput;import java.io.FileOutputStream;import java.io.IOException;import java.io.PrintStream;/** * @author Aoman_Hao */public class PrintInOutput {    public static void main(String[] args) {        try(                //使用PrintStream处理流包装了FileOutPutStream节点输出流        PrintStream ps = new PrintStream(new FileOutputStream("d:\\Java\\JavaTest\\Aoman_Hao.txt")))        {            ps.print("aa");        }        catch (IOException e) {            e.printStackTrace();        }    }}

使用处理流BufferedReader,BufferedWriter来复制文件的内容到另一个新文件

package Day19_DataInOutput;import java.io.BufferedReader;import java.io.BufferedWriter;import java.io.FileInputStream;import java.io.FileReader;import java.io.FileWriter;import java.io.IOException;/** * @author Aoman_Hao */public class BufferReadTest {    public static void main(String[] args) {        try(        //复制文件        //用BufferReader处理流包装字符输入流FileReader        BufferedReader br = new BufferedReader(new FileReader(                "d:\\Java\\JavaTest\\Aoman_Hao.txt"));        //用        BufferedWriter bw = new BufferedWriter(new FileWriter("d:\\Java\\Aoman_5.txt"));        ){        //使用BufferedReader中的特有功能读写操作        String line = null;        while((line = br.readLine())!=null){            bw.write(line);//写数据            bw.newLine();//换行            bw.flush();//刷新流        }        }catch (IOException e) {            e.printStackTrace();        }    }}

PrintWriter:有自动刷新功能:
* public PrintWriter(Writer out,boolean autoFlush)
* 第二个参数指定为true,则启动自动刷新
* PrintWriter pw = new PrintWriter(new FileWriter(“pw.txt”),true) ;
* 加入自动刷新功能并且在写数据的时候,使用println():换行
*
* println(“hello”)
相当于:
* pw.write(“”) ;
* pw.newLine() ;
* pw.flush() ;

PrintWriter自动刷新

package Day19_DataInOutput;import java.io.BufferedReader;import java.io.FileReader;import java.io.FileWriter;import java.io.IOException;import java.io.PrintWriter;/** * @author Aoman_Hao */public class PrintWriterTest {    public static void main(String[] args) throws IOException{        BufferedReader br = new BufferedReader(new FileReader(                "d:\\Java\\JavaTest\\Aoman_Hao.txt"));        //public PrintWriter(Writer out,boolean autoFlush)第二个参数指定为true,则启动自动刷新        PrintWriter pw = new PrintWriter(new FileWriter("d:\\Java\\Aoman_7.txt"));        String str = null;        while((str = br.readLine() )!=null){            pw.println(str);        }        pw.close();        br.close();    }}

system.in屏幕输出:

package Day19_DataInOutput;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;/** * @author Aoman_Hao */public class SystemInOut {    public static void main(String[] args) throws IOException{        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));        System.out.println("输入:");        String line = br.readLine();        System.out.println("输出:"+line);    }}

使用BufferedReader完成了录入数据:
使该流封装字符转换输入流,然后使用字符转换输入流封装字节流

层层封装:PrintStream ps = System.out ;//写入一个分隔符:newLine()是BufferedWriter类中的方法//BufferedWriter bw = new BufferedWriter(ps) ;//将字节打印流转换成字符流OutputStreamWriter osw = new OutputStreamWriter(ps) ;//创建字符缓冲输出流对象BufferedWriter bw = new BufferedWriter(osw) ;*/
    BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));        bw.write("aaa");        bw.newLine();        bw.close();         输出:aaa