java合并流详解

合并流

1.合并流 SequenceInputStream
 合并功能(可以把 多个文件合读成成一个文件)
 构造方法:
 参数 是迭代器 是Vector特有的
     该Vector要保存的是 InputStream的子类
 SequenceInputStream(Enumeration<? extends InputStream> e) 
 参数 传两个字节输入流
 SequenceInputStream(InputStream s1, InputStream s2) 
 // 将三个文件写成一个文件
 File file1 = new File("/Users/lanou/Desktop/Test/01.txt");
 File file2 = new File("/Users/lanou/Desktop/Test/02.txt");
 File file3 = new File("/Users/lanou/Desktop/Test/03.txt");
 // 创建集合 保存 FileInputStream
 Vector<FileInputStream> vector = new Vector<>();
 vector.add(new FileInputStream(file1));
 vector.add(new FileInputStream(file1));
 vector.add(new FileInputStream(file1));
 // 获取迭代器
 Enumeration<FileInputStream> elements = vector.elements();
 // 构建合并流 把三个文件读到一起
 SequenceInputStream sis = new SequenceInputStream(elements);
 FileOutputStream fos = new FileOutputStream("/Users/lanou/Desktop/Test/04.txt");
 // 开始读
 byte[] b = new byte[1024];
 int len = 0;
 while((len = sis.read(b)) != -1){
     fos.write(b, 0, len);
 }
 sis.close();
 fos.close();

进程和线程

2.进程:一个正在运行的程序(独立运行的程序)
       一个进程中可以只有一个线程 单线程程序
       一个进程中可以有多个线程   多线程程序(很大提升了执行效率)
  线程:一个线程相当于一个cpu的执行路径 是一个独立的运行单元

  代码如何开启线程:JVM调用main方法--->找操作系统--->开启一个名字是main的执行路径
                 main就是一个线程 叫主线程      
  实现多线程的两种方式:
    第一种:
     1.创建类继承Thread类
     2.重写父类中的run 方法
     class SubThread extends Thread{
         public SubThread(){
         }
         public SubThread(String name){
             //调用父类构造方法
             super(name);
         }
         //重写润run方法
         @Override
         public void run(){
             for(int i = 0; i < 50; i++){
                 // 获取线程名的方法 getName
                 System.out.println(getName() + " run方法 " + i);
             }
         }
     }

    public static void main(String[] args) {
    // 创建一个线程
    SubThread subThread = new SubThread("线程1");
    // 如果直接调用run方法 相当于 只调用了一个普通的成员方法
    // subThread.run();
    // 开启线程
    // 调用run方法不能开启线程 需要调用start方法开启线程
    subThread.start();

    // 获取当前执行的线程对象 静态方法
    Thread currentThread = Thread.currentThread();
    // 获取主线程的名字
    System.out.println(currentThread.getName);
    for (int i = 0; i < 50; i++) {
            System.out.println("main方法" + i);
        }
    }
    第二种:接口实现方式来创建对象
    class RunnableImpl implements Runnable{
    @Override
    public void run() {
        for (int i = 0; i < 50; i++) {
            System.out.println(Thread.currentThread().getName()  + "--" + i);
        }
    }
    public static void main(String[] args) {
    // 创建线程
    RunnableImpl rImpl = new RunnableImpl();
    Thread thread = new Thread(rImpl);
    // 开启线程
    thread.start();
    }

Thread中的set/get方法

3.创建一个Thread子类 要求: 成员变量 String name set/get方法  重写run方法  要有(带名字)构造方法 无参
public static void main(String[] args) {

    }
}

class NameThread extends Thread{
    private String name;
    public NameThread() {
    }
    //父类已经有了 getName方法 并且用final修饰 不能被重写 所以报错
    public NameThread(String name, String MyName) {
        // 传递的是线程的名字 利用的是父类的构造方法
        super(name);
        // 给自己的类赋值
        // 建议: 不要使用name这个名字 避免麻烦
        this.name = MyName;
    }
    // 解决方法 把set/get方法改名
    public String getMyName() {
        return name;
    }
    public void setMyName(String name) {
        this.name = name;
    }

    /*
     * 父类已经有了 getName方法 并且用final修饰 不能被重写 所以报错
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    */
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值