内存操作流 打印流 打印流格式化输出

什么是内存流

熟知的有文件流,也就是对文件进行IO处理,但IO操作也可在内存中,这种流称为内存操作流。
文件流是以文件为操作终端,会产生文件(不论文件数据是否保存),但是内存流是以内存为操作终端,不会产生文件。
内存流分为2类:
1.字节内存流:ByteArrayInputStream、ByteArrayOutputStream
2.字符内存流:CharArrayReader、CharArrayWriter

//字节内存流继承关系
public class ByteArrayInputStream extends InputStream ;
public class ByteArrayOutputStream extends OutputStream;

//字符内存流继承关系:
public class CharArrayReader extends Reader;
public class CharArrayWriter extends Writer;

在这里插入图片描述
在这里插入图片描述
在文件流中,会创建一个File终端对象,因为不知道要操作哪个文件,但是在内存流中,要操作的终端只有一个内存,所以不用手动创建内存终端对象。

用内存流实现大小写转换:

package CODE.JavaIo;

import java.io.*;

public class Mem {
    public static void main(String[] args) throws IOException {
        String str="hello pick";
        //输入输出流:
        ByteArrayInputStream in=new ByteArrayInputStream(str.getBytes());//输入流,要输入的数据保存到内存中
        ByteArrayOutputStream out =new ByteArrayOutputStream();  //输出流

        //输入输出数据
        int len=0;
        //一次读取一个字节,将读取到的数据大写然后写入内存
        while((len=in.read())!=-1)
        {
            out.write(Character.toUpperCase(len));
        }
        System.out.println(out); //HELLO PICK
        out.close();
        in.close();
    }
}

发生了IO操作,但是没有文件产生,可以理解为一个临时文件处理。
打印流

OutputStream的write只能接受字节数组,打印流是为了可以接收很多类型数据(int double String等),但核心依然是OutputStream。
简单设计一个打印流:

package CODE.JavaIo;


import java.io.*;

//设计一个简单的打印流
class PrintUtil
{
    private OutputStream out;
    //类外部传入输出流
    public PrintUtil(OutputStream out)
    {
        this.out=out;
    }
    //核心方法
    public void print(String str)
    {
        try {
            out.write(str.getBytes());
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    public void println(String str)
    {
        print(str+"\r\n");
    }
    public void print(int n)
    {
        print(String.valueOf(n));
    }
    public void println(int n)
    {
        println(String.valueOf(n));
    }
    public void print(double d)
    {
        print(String.valueOf(d));
    }
    public void println(double d)
    {
        println(String.valueOf(d));
    }
    public void close()
    {
        try {
            out.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
public class printStream {
    public static void main(String[] args) throws Exception {
        File file=new File("C:"+File.separator+"Users"+
                File.separator+ "lenovo"+File.separator+"Desktop"+
                File.separator+"Test.txt");
        OutputStream out=new FileOutputStream(file);
        PrintUtil printUtil=new PrintUtil(out);
        printUtil.print("姓名:");
        printUtil.println("pick");
        printUtil.print("年龄");
        printUtil.println(18);
        printUtil.close();
    }
}

在这里插入图片描述

系统提供的打印流

1.字节打印流:PrintStream
2.字符打印流:PrintWriter

在这里插入图片描述
在这里插入图片描述

系统提供的字节打印流
public class printStream {
    public static void main(String[] args) throws Exception {
        File file=new File("C:"+File.separator+"Users"+
                File.separator+ "lenovo"+File.separator+"Desktop"+
                File.separator+"Test.txt");
        OutputStream out=new FileOutputStream(file);
        PrintStream printUtil=new PrintStream(out);
        printUtil.print("姓名:");
        printUtil.println("pick");
        printUtil.print("年龄");
        printUtil.println(18);
        printUtil.close();
    }
}

打印流应用的是装饰设计模式(基于抽象类的设计模式),核心依然是某个类(OutputStream)的功能(write()),但是为了得到更好的效果,让其支持的功能更多。
可以很方便的扩展装饰类,装饰类不同,功能不同。
优点:扩展功能方便,需要不同的功能,只需要更换装饰类。
缺点:类结构复杂。

字节打印流格式化输出

在JDK1.5后,有了格式化输出。

public PrintStream printf(String format, Object ... args)

例:

系统提供的字节打印流
public class printStream {
    public static void main(String[] args) throws Exception {
        File file=new File("C:"+File.separator+"Users"+
                File.separator+ "lenovo"+File.separator+"Desktop"+
                File.separator+"Test.txt");
        OutputStream out=new FileOutputStream(file);
        PrintStream printUtil=new PrintStream(out);
        printUtil.printf("姓名:%s 年龄:%d","pick",18);
    }
}

String的格式化输出

//静态方法
public static String format(String format, Object... args)
String的格式化输出
public class printStream {
    public static void main(String[] args) throws Exception {
       String str=String.format("姓名:%s 年龄:%d","pick",18);
        System.out.println(str);
    }
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值