欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

数据流_小记

程序员文章站 2022-03-23 09:07:59
...

数据流_小记

数据流_小记

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

构造方法:

public DataInputStream(InputStream in);//基础的InputStraeam构建DataInputStream
public 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