Java初学总结(二十)

一、常用的字节输入与字节输出流类
1.字节输出流—顶级类OutputStream
public abstract class OutputStream-----不能new

(1) 构造方法
在这里插入图片描述

package com.wangxing.test1;
import java.io.File;
import java.io.FileOutputStream;
import java.io.OutputStream;
public class TestFileOutputStream1 {
	public static void main(String[] args) throws Exception{
		//FileOutputStream(File file) 通过File对象创建一个不可追加的字节输出流。 
		String path1="F:"+File.separator+"test"+File.separator+"info.txt";
		File  file1=new File(path1);
		FileOutputStream  out1=new FileOutputStream(file1);
		OutputStream  out11=new FileOutputStream(file1);
		//FileOutputStream(File file, boolean append) 通过File对象创建一个是否追加的字节输出流。
		FileOutputStream  out2=new FileOutputStream(file1,true);
		OutputStream  out22=new FileOutputStream(file1,true);
		//FileOutputStream(String name) 通过String 对象创建一个不可追加的字节输出流。  
		FileOutputStream  out3=new FileOutputStream(path1);
		OutputStream  out33=new FileOutputStream(path1);
		//FileOutputStream(String name, boolean append) 通过String对象创建一个是否追加的字节输出流
		FileOutputStream  out4=new FileOutputStream(path1,true);
		OutputStream  out44=new FileOutputStream(path1,true);
	}
}

(2) 实例方法
在这里插入图片描述

package com.wangxing.test1;

import java.io.File;
import java.io.FileOutputStream;
import java.io.OutputStream;

public class TestFileOutputStream2 {

	public static void main(String[] args) throws Exception{
		//通过输出流 的写出方法将数据输出到文件中
		/*
		//void	write(byte[] b) 将 b.length个字节从指定的字节数组写入此文件输出流。
		//1准备需要写出的数据
		String info="hello,world";
		//2.创建字节输出流对象
		String path1="F:"+File.separator+"test"+File.separator+"info.txt";
		File file1=new File(path1); 
		FileOutputStream out1=new FileOutputStream(file1,true);
		//3.void	write(byte[] b) 将 b.length个字节从指定的字节数组写入此文件输出流。
		out1.write(info.getBytes());
		//4.关闭流
		out1.close();
		*/
		//void	write(byte[] b, int off, int len) 将 len字节从位于偏移量 off的指定字节数组写入此文件输出流。 
		//1准备需要写出的数据
		String info="hello,world";
		//2.创建字节输出流对象
		String path1="F:"+File.separator+"test"+File.separator+"info.txt";
		File file1=new File(path1); 
		FileOutputStream out1=new FileOutputStream(file1,true);
		//3.void	write(byte[] b, int off, int len) 将 len字节从位于偏移量 off的指定字节数组写入此文件输出流。 
		byte b[]=info.getBytes();
		out1.write(b,6,5);
		//4.关闭流
		out1.close();
		
		
		//void	write(int b) 将指定的字节写入此文件输出流。 [执行一次只写出一个字节]
		//1准备需要写出的数据
		String info="hello,world";
		//2.创建字节输出流对象
		String path1="F:"+File.separator+"test"+File.separator+"info.txt";
		File file1=new File(path1); 
		FileOutputStream out1=new FileOutputStream(file1,true);
		//3.void	write(int b) 将指定的字节写入此文件输出流。 [执行一次只写出一个字节]
		byte bytearray[]=info.getBytes();
		for(byte b:bytearray) {
			out1.write(b);
		}
		//关闭流
		out1.close();
	}
}

运行结果:
在这里插入图片描述

特点:上面的字节输出流只能写出字节数组,不能直接写出基本数据类型的数据

1.2 DataOutputStream:将Java基本数据类型写到底层输出流
public class DataOutputStream extends FilterOutputStream implements DataOutput
(1)构造方法
DataOutputStream(OutputStream out) 创建一个新的数据输出流,以将数据写入指定的底层输出流。

package com.wangxing.test2;

import java.io.DataOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.OutputStream;

public class TestDataOutputStream1 {
	public static void main(String[] args) throws Exception{
		//DataOutputStream(OutputStream out) 创建一个新的数据输出流,以将数据写入指定的底层输出流。 
		String path1="F:"+File.separator+"test"+File.separator+"data.txt";
		File  file=new File(path1);
		//FileOutputStream out=new FileOutputStream(file);
		OutputStream out=new FileOutputStream(file);
		DataOutputStream  dout=new DataOutputStream(out);
	}
}

(2)实例方法
在这里插入图片描述

package com.wangxing.test2;

import java.io.DataOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.OutputStream;

public class TestDataOutputStream2 {
	public static void main(String[] args) throws Exception{
		//DataOutputStream(OutputStream out) 创建一个新的数据输出流,以将数据写入指定的底层输出流。 
		String path1="F:"+File.separator+"test"+File.separator+"data.txt";
		File  file=new File(path1);
		//FileOutputStream out=new FileOutputStream(file);
		OutputStream out=new FileOutputStream(file,true);
		DataOutputStream  dout=new DataOutputStream(out);
		//void	writeInt(int v) 将底层输出流写入 int作为四字节,高位字节。 
		dout.writeInt(1001);
		//void	writeChar(int v) 将 char写入底层输出流作为2字节值,高字节优先。
		dout.writeChar('\t');
		//void	writeDouble(double v) 双参数传递给转换 long使用 doubleToLongBits方法在类 Double ,然后写入该 long值基础输出流作为8字节的数量,高字节。 
		dout.writeDouble(168.5);
		dout.writeChar('\t');
		//void	writeBoolean(boolean v) 将 boolean写入底层输出流作为1字节值。 
		dout.writeBoolean(true);
		dout.writeChar('\t');
		//void	writeUTF(String str) 使用 modified UTF-8编码以机器无关的方式将字符串写入基础输出流。 
		dout.writeUTF("zhangsan");
		//void	flush() 刷新此数据输出流。 
		dout.flush();
		dout.close();
		out.close();
	}
}

运行结果:
在这里插入图片描述

2. 字节输入流—顶级类InputStream
public abstract class InputStream—不能new
2.1 FileInputStream:文件字节输入流
public class FileInputStream extends InputStream
(1)构造方法
在这里插入图片描述

package com.wangxing.test1;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
public class TestInputStream1 {
	public static void main(String[] args) throws Exception{
		//FileInputStream(File file) 通过File对象创建一个字节输入流
		String path1="F:"+File.separator+"test"+File.separator+"info.txt";
		File file1=new File(path1);
		FileInputStream  in1=new FileInputStream(file1);
		InputStream  in11=new FileInputStream(file1);
		//FileInputStream(String name) 通过String对象创建一个字节输入流
		FileInputStream  in2=new FileInputStream(path1);
		InputStream  in22=new FileInputStream(path1);
	}
}

(2)实例方法
在这里插入图片描述

package com.wangxing.test1;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
public class TestInputStream1 {
	public static void main(String[] args) throws Exception{
		//读取info.txt中的数据值到我们的程序中
		
		/*
		//创建被读取数据的文件路径
		String path1="F:"+File.separator+"test"+File.separator+"info.txt";
		//根据文件路径创建对应的Fiel对象
		File file1=new File(path1);
		//创建字节输入流对象
		InputStream  in1=new FileInputStream(file1);
		//int	read(byte[] b) 从该输入流读取最多 b.length个字节的数据为字节数组。
		//返回值:读取的总字节数, 如果到达文件末尾返回-1
		byte  bytearray[]=new byte[(int)file1.length()];
		int len=in1.read(bytearray);
		//关闭流
		in1.close();
		String info=new String(bytearray,0,len);
		System.out.println(info);
		*/
		
		//创建被读取数据的文件路径
		String path1="F:"+File.separator+"test"+File.separator+"info.txt";
		//根据文件路径创建对应的Fiel对象
		File file1=new File(path1);
		//创建字节输入流对象
		InputStream  in1=new FileInputStream(file1);
		//int	read()从该输入流读取一个字节的数据。 
		//返回值:读取到的具体字节数据的int型,如果到达文件末尾返回-1
		byte  bytearray[]=new byte[(int)file1.length()];
		//保存每一次读取的数据值
		int data=0;
		//数组下标
		int len=0;
		while((data=in1.read())!=-1) {
			bytearray[len]=(byte)data;
			len++;
		}
		//关闭流
		in1.close();
		String info=new String(bytearray,0,len);
		System.out.println(info);
	}
}

2.2 DataInputStream:从底层输入流中读取基本 Java 数据类型
public class DataInputStream extends FilterInputStream implements DataInput
(1)构造方法
在这里插入图片描述

package com.wangxing.test2;
import java.io.DataInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
public class TestDataInputStream {
	public static void main(String[] args)throws Exception {
		//DataInputStream(InputStream in) 创建使用指定的底层InputStream的DataInputStream。
		String path1="F:"+File.separator+"test"+File.separator+"data.txt";
		File file=new File(path1);
		//FileInputStream  in=new FileInputStream(file);
		InputStream  in=new FileInputStream(file);
		DataInputStream  din=new DataInputStream(in);
	}

}

(2)实例方法
在这里插入图片描述

package com.wangxing.test2;
import java.io.DataInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
public class TestDataInputStream {
	public static void main(String[] args)throws Exception {
		//DataInputStream(InputStream in) 创建使用指定的底层InputStream的DataInputStream。
		String path1="F:"+File.separator+"test"+File.separator+"data.txt";
		File file=new File(path1);
		//FileInputStream  in=new FileInputStream(file);
		InputStream  in=new FileInputStream(file);
		DataInputStream  din=new DataInputStream(in);
		//int	readInt() 
		int intvalue=din.readInt();
		//char	readChar() 
		char op1=din.readChar();
		//double	readDouble() 
		double doublevalue=din.readDouble();
		char op2=din.readChar();
		//boolean	readBoolean() 
		boolean booleanvalue=din.readBoolean();
		char op3=din.readChar();
		//String	readUTF() 
		String string=din.readUTF();
		din.close();
		in.close();
		System.out.println(intvalue);
		System.out.println(doublevalue);
		System.out.println(booleanvalue);
		System.out.println(string);
	}
}

运行结果:
在这里插入图片描述

3.什么是序列化?如何实现序列化?
序列化-----将一个java对象转换成2进制流数据过程。
反序列化—2进制流数据转换成一个java对象的过程。
如何实现序列化?
(1)为被序列化的java对象的生成类实现一个序列化接口【Serializable】
public interface Serializable
注意:①该接口中一个方法都没有
②可序列化类的所有子类型都是可序列化的
(2)通过java提供ObjectOutputStream类的writeObject(Object obj)

ObjectOutputStream的构造方法
在这里插入图片描述
ObjectOutputStream的实例方法
在这里插入图片描述
将java对象序列化到记事本文件。

package com.wangxing.test1;
import java.io.Serializable;
public class Student implements Serializable{
	public void  testMethod() {
		System.out.println("这是Student类的实例方法");
	}
}
package com.wangxing.test1;
import java.io.File;
import java.io.FileOutputStream;
import java.io.ObjectOutputStream;

public class TestMain {
	public static void main(String[] args)throws Exception {
		Student  student=new Student();
		//ObjectOutputStream(OutputStream out) 创建一个写入指定的OutputStream的ObjectOutputStream。 
		String path1="F:"+File.separator+"test"+File.separator+"student.txt";
		File file=new File(path1);
		FileOutputStream  out=new FileOutputStream(file);
		ObjectOutputStream  objout=new ObjectOutputStream(out);
		objout.writeObject(student);
		objout.flush();
		objout.close();
		out.close();
	}
}

将上面序列化到记事本文件中的java对象,反序列化回来成一个可使用的java对象。此时就需要ObjectInputStream类的Object readObject()方法读取对象。

ObjectInputStream类的构造方法
在这里插入图片描述
ObjectInputStream类的实例方法
在这里插入图片描述

package com.wangxing.test1;

import java.io.File;
import java.io.FileInputStream;
import java.io.ObjectInputStream;

public class Test {
	public static void main(String[] args)throws Exception {
		//ObjectInputStream(InputStream in) 创建从指定的InputStream读取的ObjectInputStream。 
		String path1="F:"+File.separator+"test"+File.separator+"student.txt";
		File file=new File(path1);
		FileInputStream  in=new FileInputStream(file);
		ObjectInputStream  objin=new ObjectInputStream(in);
		Object  obj=objin.readObject();
		objin.close();
		in.close();
		Student stu=(Student)obj;
		stu.testMethod();
	}
}

运行结果:
在这里插入图片描述

Java中的输入输出流
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值