当前位置:Gxlcms > 数据库问题 > Java学习总结(8)—内存流,打印流,对象流,RandomAccessFile,装饰者设计模式

Java学习总结(8)—内存流,打印流,对象流,RandomAccessFile,装饰者设计模式

时间:2021-07-01 10:21:17 帮助过:18人阅读

  1. 内存流主要用来操作内存

  2. BytearrayInputStreamByteArrayOutputStream输入和输出可以把文件作为数据源,也可以把内存作为数据源

    (1)ByteArrayInputStream主要完成将内容从内存读入到程序中,而ByteArrayOutputStream的主要功能是是将数据写入到内存中

    (2)注意:因为这两个流没有使用系统资源,所以不用关闭,也不需要抛出异常

  3. 内存操作示意图

    (1)从程序中读:程序<ByteArrayInputStream<—内存数据

    (2)向内存中写:程序>ByteArrayOutputStream<—内存数据

  4. ByteArrayOutputStream获取数据的方式

    (1)public byte[] toByteAarray():创建一个新分配的字节数组,它的大小 是这个输出流的当前大小和缓冲区的有效内容的副本

    (2)public Stirng toString():使用该平台默认的字符集将缓冲区的内容的转换为字符串

1(利用内存流复制图片)

package bytestream;

 

import java.io.*;

 

public class ByteOutputStreamDemo {

 

    public static void main(String[] args) {

        File srcFile = new File("d:" + File.separator + "1TX761XVUM10.jpg");// 源文件地址

        File destFile = new File("e:" + File.separator + srcFile.getName());// 目标文件地址

        InputStream input = null;// 输入流

        OutputStream out = null;// 输出流

        ByteArrayOutputStream bos = new ByteArrayOutputStream();// 存流

        try {

            input = new FileInputStream(srcFile);// 对象用于读取源文件

            out = new FileOutputStream(destFile);// 对象用于写入目标文件

            byte[] b = new byte[1024];

            int len = 0;

            // 边读编写

            System.out.println("开始复制文件!");

            while ((len = input.read(b)) != -1) {

                bos.write(b, 0, len);

            }

            byte[] date = bos.toByteArray();// 创建一个新的字节数组,他的大小是这个输出流的当前大小,和缓冲区的有效    内容的副本

            out.write(date);// 讲缓冲区中的内容一次性写入到目标文件中

            System.out.println("文件复制完毕......");

            } catch (Exception e) {

                e.printStackTrace();

            } finally {

                try {

                // 关闭资源

                    out.close();

                    input.close();

                    bos.close();

                } catch (IOException e) {

                    e.printStackTrace();

            }

        }

 

    }

 

}

运行结果:开始复制文件!

文件复制完毕.....

2(以byteArrayInputStream为例):

package bytestream;

 

import java.io.*;

 

public class ByteArrayInputStreamDemo {

 

public static void main(String[] args) {

String date="世界,你好!!!!";

/**

 * 内存输入流中传入的参数为要读取的字节数组,故将date

 * 转化为字节数组date.getBytes(),再传入内存流中

 */

ByteArrayInputStream  bis = new  ByteArrayInputStream(date.getBytes());

byte[] b=new byte[1024];//自定义缓存区

int len=0;

try {

len=bis.read(b);

System.out.println("读取到的内容是:"+new String(b,0,len));

} catch (IOException e) {

e.printStackTrace();

}

//数据存于缓存区中,缓存流不用关闭

}

 

}

运行结果:读取到的内容是:世界,你好!!!!

 

二.打印流

  1. 打印流提供了打印方法,可以将各种数据类型原样打印,可以操作输出流和文件

  2. PrintStream:

    (1)提供操作字节功能

    (2)如果包装的是缓冲流可自动设置flush

    (3)可设置字符集

  3. PrintWriter

    (1)没有操作字节功能

    (2)内部有缓冲区,即使自动刷新设置为true

    (3)可设置字符集

  4. 打印流的构造方法

    <1>PrintStream的构造方法

    (1)public  PrintStream(File file)

    (2)public  PrintStream(OutputStream out)

    <2>PrintWriter的构造方法

    (1)public  PrintWriter(File file)

    (2)Public  PrintWriter(Writer out)

    (3)Public  PrintWriter(OutputStream out)

1(写入一首诗到C盘文件下):

package print;

 

import java.io.*;

 

public class PrintStreamDemo {

 

public static void main(String[] args) {

File f=new File("C:"+File.separator+"静夜诗.txt");

PrintStream ps=null;

try {

ps=new PrintStream(f);

ps.println("\t床前明月光");

ps.println("\t疑是地上霜");

ps.println("\t举头望明月");

ps.println("\t低头思故乡");

ps.println("\t\t\t作者:李白");

System.out.println("打印成功...");

} catch (FileNotFoundException e) {

e.printStackTrace();

}finally{

ps.close();

}

}

 

}

运行结果:打印成功...

2PrintStream若包装缓冲流可设置flush):

package print;

 

import java.io.*;

 

public class PrintStreamDemo2 {

 

public static void main(String[] args) {

File f=new File("c:"+File.separator+"兵法.txt");

PrintStream ps=null;

OutputStream out=null;

try {

out=new FileOutputStream(f);

BufferedOutputStream bos= new BufferedOutputStream(out);

ps=new PrintStream(bos);

ps.println("战武七经:");

ps.println("1.孙子兵法");

ps.println("2.六韬.三略");

ps.println("3.吴子");

ps.println("4.司马法");

ps.println("5.孙膑兵法");

ps.flush();//将缓冲流中的数据刷入文件中

System.out.println("打印成功....");

} catch (FileNotFoundException e) {

e.printStackTrace();

}

}

 

}

运行结果:打印成功....

三.对象流,序列化与反序列化

  1. 相关类

    1

人气教程排行