Java之IO流(3)--自定义流以及其他流

本文详细介绍了Java中的自定义流,包括使用StringBuilder和FileReader创建缓冲区读取。同时,讨论了转换流的重要性,特别是在处理编码问题上的应用,如ASCII、GBK、Unicode和UTF-8编码的转换。此外,还讲解了如何通过转换流避免乱码问题,并给出了将文件从一种编码格式转换为另一种的具体方法。键盘录入部分,探讨了如何结合转换流处理键盘输入并将其写入文件。最后,文章探讨了对象流的概念,包括ObjectOutputStream和ObjectInputStream的使用,强调了序列化接口在对象读写中的必要性。
摘要由CSDN通过智能技术生成

一.自定义流

1使用StringBuilder和FileReader自定义一个读取的缓冲区

自定义的读流需要继承Reader
 写一个方法,在这个方法里面有遍历
 先判断条件,有可能导致此方法结束,或者有肯能导致本次循环不往下执行
 主要判断 \r \n

package com.it.utils;

import java.io.IOException;
import java.io.Reader;

public class MyBuffered extends Reader {
	
	Reader reader;
	public MyBuffered(Reader reader) {
		super();
		this.reader = reader;
	}

	//读行的方法
	public String readLine() throws IOException {
		StringBuilder sBuilder = new StringBuilder();
		//使用一个读一个读的方式来完成读行
		int num = 0;

		while ((num=reader.read())!=-1) {	//一个一个读
			//在读的过程中 首先判断本行是否结束\r\n
			if(num == '\r') { //如果读到的是\r	跳过	看后面是不是\n
				continue;
			} else if (num == '\n') {	//如果后面跟的是\n 说明本行结束 返回本行
				sBuilder.append("\r\n");	//换行
				return sBuilder.toString();
			} else {	//是本行的正常字符,追加到后面
				sBuilder.append((char)num);
			}
			
			//主要针对最后一行
			if(sBuilder.length()!=0) {	//防止本行后面没有\r\n不返回  只要有字符就返回
				return sBuilder.toString();
			}
		}
		
		return null;
	}
	@Override
	public int read(char[] cbuf, int off, int len) throws IOException {
		// TODO Auto-generated method stub
		return 0;
	}
	//关流
	public void close() throws IOException {
		if(reader!=null) {
			reader.close();
		}
	}
}


package com.it.test;
import java.io.FileReader;
import java.io.IOException;
import com.it.utils.MyBuffered;

public class MyBufferedTest {
	public static void main(String[] args) throws IOException {
		FileReader reader = new FileReader("a.txt");
		MyBuffered myBuffered = new MyBuffered(reader);
		String st
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值