java流:打印流,序列流,数据流,内存流

打印流:字节打印流PrintStream

package com.qianfeng.test;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.PrintStream;

/*
 * 打印流:除了拥有输出流的特点之外,还有打印的功能,比如println,print等方法。
 * 分成两种:
 * 字节打印流:PrintStream
 * 字符打印流:PrintWriter
 * 
 * 字节打印流:
 * 可以直接关联的设备(传入的参数)
 * 1.File类型的文件
 * 2.字符串类型的文件
 * 3.字节输出流
 * 
 */
public class Demo5 {

	public static void main(String[] args) throws IOException {
		
//		 * 1.File类型的文件
		//PrintStream printStream = new PrintStream(new File("D:\\workspace\\32\\BigData1715N21\\src\\com\\qianfeng\\test\\Demo1.java"));
		
//		 * 2.字符串类型的文件
		//PrintStream printStream = new PrintStream("temp3.txt");//对于当前的文件,如果不存在,会自动创建。
		
//		 * 3.字节输出流
		PrintStream printStream = new PrintStream(new FileOutputStream("temp3.txt"));
		
		//讲解print()方法的原理
		printStream.write(97);//00000000 00000000 00000000 01100001 在打印的时候将前面三个字节砍掉了,得到a
		printStream.write(353);//00000000 00000000 00000001 01100001 在打印的时候将前面三个字节砍掉了,得到a
		
		printStream.print(353);
		//先将353转成字符串再转成字节数组
		printStream.write(String.valueOf(353).getBytes());
		
		printStream.close();
		
	}
}

打印流:字符打印流PrintWriter

package com.qianfeng.test;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;

/*
 * 字符打印流:
 * 可以直接关联的设备(传入的参数)
 * 1.File类型的文件
 * 2.字符串类型的文件
 * 3.字节输出流
 * 4.字符写出流
 */
public class Demo6 {

	public static void main(String[] args) throws IOException {
		
		//实例:将数据从键盘接收到控制台
		BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in));
		
		//创建字符打印流
		PrintWriter printWriter = new PrintWriter(System.out);
		
		String data = null;
		while((data=bufferedReader.readLine())!=null){
			printWriter.println(data);
			printWriter.flush();
		}
		
		bufferedReader.close();
		printWriter.close();
		
		
	}
}

序列流

package com.qianfeng.test;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.SequenceInputStream;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Enumeration;
import java.util.Vector;

public class Demo7{
	/*
	 * 序列流:把多个输入流的内容一次性的打印(操作)---字节流
	 */
	public static void main(String[] args) throws IOException {
		//创建三个输入流
		FileInputStream fileInputStream1 = new FileInputStream("src\\com\\qianfeng\\test\\Demo2.java");
		FileInputStream fileInputStream2 = new FileInputStream("src\\com\\qianfeng\\test\\Demo2.java");
		FileInputStream fileInputStream3 = new FileInputStream("src\\com\\qianfeng\\test\\Demo1.java");
		
		//将三个输入流放入序列流
		//方式一:先放入一个Vector
//		Vector<FileInputStream> vector = new Vector<>();
//		vector.add(fileInputStream1);
//		vector.add(fileInputStream2);
//		vector.add(fileInputStream3);
//		
//		//得到枚举器
//		Enumeration<FileInputStream> e1 = vector.elements();
		
		//方式二:先放入一个list
		ArrayList<FileInputStream> list = new ArrayList<>();
		list.add(fileInputStream1);
		list.add(fileInputStream2);
		list.add(fileInputStream3);
		
		//将集合转换成枚举
		Enumeration<FileInputStream> e2 = Collections.enumeration(list);
		
		//创建序列流对象并关联相关的文件--参数是一个枚举器
		//SequenceInputStream sequenceInputStream = new SequenceInputStream(e1);
		SequenceInputStream sequenceInputStream = new SequenceInputStream(e2);
		
		//创建输出流
		FileOutputStream fileOutputStream = new FileOutputStream("temp2.txt");
		
		//读写
		byte[] arr = new byte[1024];
		int num;
		while ((num = sequenceInputStream.read(arr)) != -1) {
			fileOutputStream.write(arr, 0, num);
			
			fileOutputStream.flush();
		}
		
		sequenceInputStream.close();
		fileOutputStream.close();
		
		
	}
}

数据流

package com.qianfeng.test;

import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;

public class Demo8 {
	/*
	 * 数据流:字节流
	 * DataInputStream:  数据输入流
	 * DataOutputStream:  数据输出流
	 * 
	 * 注意:数据流要与字节输入流,输出流配合使用
	 */
	public static void main(String[] args) throws IOException {
		
		//写
		writeData();
		
		//读
		readData();
	}
	
	public static void writeData() throws IOException {
		DataOutputStream dataOutputStream = new DataOutputStream(new FileOutputStream("temp3.txt"));
		
		//写
		dataOutputStream.writeInt(97);//4个字节      00000000 00000000 000000000 011000001  00000001
		dataOutputStream.writeBoolean(true);//1个   
		dataOutputStream.write(33);//1个
		dataOutputStream.writeDouble(34.56);//8个
		
		//关闭流
		dataOutputStream.close();
	}
	
	public static void readData() throws IOException {
		DataInputStream dataInputStream = new DataInputStream(new FileInputStream("temp3.txt"));
		
		//这里的boolean型和int型的数据,在读的时候由于与之前写的顺序相反了,所以读取的数据错误
		/*
		 * 注意点:1.读的顺序要与写的顺序一致   2.类型保持一致
		 */
		System.out.println(dataInputStream.readBoolean());// 00000000
		System.out.println(dataInputStream.readInt());//00000000 000000000 011000001  00000001
		
		System.out.println(dataInputStream.readByte());
		System.out.println(dataInputStream.readDouble());
		
		dataInputStream.close();
	}
	
}

内存流

package com.qianfeng.test;

import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;

public class Demo9 {
	public static void main(String[] args) throws IOException {
		/*
		 * 内存流(byte数组流):
		 * ByteArrayInputStream:写入内存,在内部有一个数组,数据被放在这里面
		 * ByteArrayOutputStream:将数据取出,放在字节数组里面
		 */
		
		//创建输入流,关联一个byte型的数组,作为缓冲区数据
		ByteArrayInputStream bais = new ByteArrayInputStream("hello world".getBytes());
		
		//创建输出流-不需要指定参数
		ByteArrayOutputStream baos = new ByteArrayOutputStream();
		
		byte[] arr = new byte[1024];
		int num;
		while ((num = bais.read(arr)) != -1) {
			baos.write(arr, 0, num);
		}
		
		System.out.println(new String(arr));
		
		bais.close();
		baos.close();
		
		//注意:将流关闭了之后,还可以调用方法,不会报错.
		baos.write(45);
	}
}

猜你喜欢

转载自blog.csdn.net/weixin_42741866/article/details/82857739
今日推荐