第二十篇(输入和输出(I/O)处理(二))

输入和输出处理(二)

1. 掌握基本的字符流的使用

在这里插入图片描述
字符流的基类:

Reader :读取字符流的抽象类
Writer :写入字符流的抽象类
字符输入流

常用实现类:

  FileReader 

构造:

FileReader(File file);
FileReader(String pathname);

常用方法:

int  read(char[] buffer); 读取数据到字符数组中  返回读取的字符数

int  read(char[] buffer,int offset,int len); 读取指定长度的字符数据到数组中  返回读取的字符数
字符输出流
FileWriter

构造:

	FileWriter(File file);

	FileWriter(String pathname);

	FileWriter(String/File pathname,boolean append); 追加数据

常用方法:

	void  write(String str);  输出一个字符串

	void  write(String str,int offset,int len);  输出一个字符串的一部分

	void  write(char[] buffer); 输出一个字符数组

	void writer(char[] buffer,int offset, int len); 输出一个字符数组的一部分

关流方法:void close(); 在try-catch中可以通过try()形式自动关流。

2. 掌握高效字符流的使用

 List item
高效字符输入流

BufferedReader:字符缓冲流,从字符输入流中读取文本,缓冲各个字符,从而实现字符、数组和行的高效读取。

构造:

   // 创建一个使用默认大小输入缓冲区的缓冲字符输入流
    BufferedReader(Reader in)
    // 创建一个使用指定大小输入缓冲区的缓冲字符输入流
    BufferedReader(Reader in, int sz)

常用方法:

	String readLine(); 读取一行数据

	其他同普通字符输入流,但是比之更加高效。

展示代码:

        //生成字符缓冲流对象
        BufferedReader reader = new BufferedReader(new InputStreamReader(new FileInputStream("test.txt")));
        String str;
        //一次性读取一行
        while ((str = reader.readLine()) != null) {
            System.out.println(str);
        }

        //关闭流
        reader.close();
高效字符输出流

BufferedWriter:字符缓冲流,将文本写入字符输出流,缓冲各个字符,从而提供单个字符、数组和字符串的高效写入。

构造:

    // 创建一个使用默认大小输出缓冲区的缓冲字符输出流
    BufferedWriter(Writer out)
    // 创建一个使用给定大小输出缓冲区的新缓冲字符输出流
    BufferedWriter(Writer out, int sz)

常用方法:

    // 写入一个行分隔符
    void newLine() 
方法基本和普通字符输出流一样,但是比之更加高效。(都是重新重写自Writer类的相关方法)

3.读写二进制文件

读取二进制文件;其中需要考虑二进制文件读出来的是十进制数,需要将二个字节合成一个short型,并转换为int型值。

java中这个符号“|=”表示“比较两个对象是否相等”。

举例说明:a |= b的意思就是把a和b按位或然后赋值给a 按位或的意思就是先把a和b都换成2进制,然后用或操作,相当于a = a|b a != b的意思a不等于b;

读字节

	    File file = new File(fileName);
	    
	    in1 =new FileInputStream(file);
	    
	    data_in = new DataInputStream(in1);
	    
	    byte[] itemBuf = new byte[888];
	    
	    data_in.read(itemBuf, 0, 888);

byte[] 转 int 和 short 的方法

public static short getShort(byte buf1, byte buf2) {
        short r = 0;
        r |= (buf1 & 0x00ff);
        r <<= 8;
        r |= (buf2 & 0x00ff);
        return r;
    }
    public static int getInt(byte buf1, byte buf2, byte buf3, byte buf4)  {
        int r = 0;
        r |= (buf1 & 0x000000ff);
        r <<= 8;
        r |= (buf2 & 0x000000ff);
        r <<= 8;
        r |= (buf3 & 0x000000ff);
        r <<= 8;
        r |= (buf4 & 0x000000ff);
        return r;
    }

4. 掌握序列化和反序列化的实现(对象流)

Java序列化是指把Java对象转换为字节序列的过程,而Java反序列化是指把字节序列恢复为Java对象的过程;

序列化:对象序列化的最主要的用处就是在传递和保存对象的时候,保证对象的完整性和可传递性。序列化是把对象转换成有序字节流,以便在网络上传输或者保存在本地文件中。序列化后的字节流保存了Java对象的状态以及相关的描述信息。序列化机制的核心作用就是对象状态的保存与重建。

反序列化:客户端从文件中或网络上获得序列化后的对象字节流后,根据字节流中所保存的对象状态及描述信息,通过反序列化重建对象。

序列化

ObjectOutputStream
在这里插入图片描述

反序列化

ObjectInputStream

	public class Demo2 {
	
		public static void main(String[] args) {
			try (
				// 构造:ObjectInputStream(InputStream is)
				ObjectInputStream ois = new ObjectInputStream(new FileInputStream("d:/hotel.txt"));
				){
				// 反序列化
				Object obj = ois.readObject();
				Hotel hotel = (Hotel)obj;
				System.out.println(hotel);
			} catch (Exception e) {
				e.printStackTrace();
			}
		}
	}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值