JavaIO流的两种拷贝方式及桥转流的基本写法

 JavaIO流的两种拷贝方式及桥转流的基本写法  


方法一                                                        

package ioTest;

import java.io.FileInputStream;
import java.io.FileOutputStream;

public class TestCopy {

	public static void main(String[] args) throws Exception {
		fileCopy("E:\\file\\b.txt", "E:\\file\\a.txt");

	}
	public static void fileCopy(String startAddr, String endAddr) throws Exception {
		FileInputStream fis = new FileInputStream(startAddr);
		FileOutputStream fos = new FileOutputStream(endAddr);
		byte[] bs = new byte[1024];
		while(true) {
			int len = fis.read(bs);
			if(len==-1) break;
			fos.write(bs,0,len);
		}
		fis.close();
		fos.close();
	}

}

方法二添加过滤流的形式

package ioTest;

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.FileInputStream;
import java.io.FileOutputStream;

public class Test5Copy{

	public static void main(String[] args) throws Exception {
		fileCopy("E:\\file\\c.txt", "E:\\file\\d.txt");

	}
	public static void fileCopy(String startAddr, String endAddr) throws Exception{
		FileInputStream fis = new FileInputStream(startAddr);
		BufferedInputStream in = new BufferedInputStream(fis);
		
		FileOutputStream fos = new FileOutputStream(endAddr);
		BufferedOutputStream out = new BufferedOutputStream(fos);
		
		byte[] bs = new byte[5];
		while(true) {
			int len = in.read(bs);
			if(len == -1)break;
			out.write(bs, 0, len);
		}
		in.close();//闭流必须闭最外层流
		out.close();
	}

}

桥转流

package io2;

import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;

public class Io2Test3Bridge {

	public static void main(String[] args) throws Exception{
		//创建字节节点流
		FileOutputStream fos = new FileOutputStream("c.txt");
		//创建桥转换流
		OutputStreamWriter osw = new OutputStreamWriter(fos,"UTF-8");
		//创建换缓冲过滤流
		PrintWriter pw = new PrintWriter(osw);
		//输出数据
		pw.println("闺中少妇不知愁");
		pw.println("春日凝装上翠楼");
		pw.println("忽见陌上杨柳色");
		pw.println("悔教夫婿觅封侯");
		
		//关闭流
		pw.close();
		FileInputStream fis = new FileInputStream("c.txt");
		InputStreamReader isr = new InputStreamReader(fis,"UTF-8");
		BufferedReader br = new BufferedReader(isr);
		while(true) {
			String str = br.readLine();
			if(str == null) break;
			System.out.println(str);
		}

	}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java中,可以使用对象方式实现深拷贝。对象方式包括ObjectInputStream和ObjectOutputStream两个类。 要实现深拷贝,需要满足两个条件: 1. 对象必须实现Serializable接口。 2. 对象的所有引用类型成员变量也必须实现Serializable接口。 下面是一个示例代码,演示如何使用对象方式实现深拷贝: ```java import java.io.*; class MyClass implements Serializable { private String name; private int age; public MyClass(String name, int age) { this.name = name; this.age = age; } // Getters and setters public String toString() { return "Name: " + name + ", Age: " + age; } } public class DeepCopyExample { public static void main(String[] args) throws IOException, ClassNotFoundException { MyClass obj1 = new MyClass("John", 25); // 使用对象方式进行深拷贝 ByteArrayOutputStream bos = new ByteArrayOutputStream(); ObjectOutputStream out = new ObjectOutputStream(bos); out.writeObject(obj1); out.flush(); out.close(); ByteArrayInputStream bis = new ByteArrayInputStream(bos.toByteArray()); ObjectInputStream in = new ObjectInputStream(bis); MyClass obj2 = (MyClass) in.readObject(); in.close(); // 修改obj1的值,不会影响obj2 obj1.setName("Mike"); obj1.setAge(30); System.out.println("obj1: " + obj1); System.out.println("obj2: " + obj2); } } ``` 在上面的示例中,首先创建了一个MyClass对象obj1,然后使用对象方式进行深拷贝,将obj1写入字节数组输出,并通过字节数组输入读取到obj2中。 最后,修改了obj1的值,但是不会影响到obj2的值。这证明了对象方式实现的是深拷贝。 需要注意的是,对象方式实现深拷贝的前提是被拷贝的对象及其所有引用类型成员变量都必须实现Serializable接口。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值