IO流的基本使用

博主整理近期Java IO学习内容,介绍了IO流分类。包括字符流和字节流的区别,如数据单元、可传输文件类型及基类;还提及按接触对象分为节点流和处理流及两者差异。给出简单输入输出流示例,指出输出汉字乱码问题及解决思路,强调关闭流的重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

我也是在整理自己的在这段时间的学习对于一IO的一些类有新的认识,整理一下
第一部分:IO流中分字符流和字节流,
字符流和字节流的区别
字节流的数据单元的是8位的字节,字符流的数据单元的是16位的字符,
字节流可以传输所有的文件,图片视频等但是字符流只能传输文本文件,文档,HTML等文本文档
字节流的基类是InputStream和OutputStream,字节流的基类是Reader和writer.
第二部分IO流还有别的分类,按照流接触的对象分为节点流(也称作低级流)和处理流(也叫包装流或者高级流),两者的区别是,节点流直接接触到数据,而处理流则是对一个已存在的流进行连接和处理,我自己认为节点流很基础,但是不如处理流要方便
简单输入流小demo(我用字节流做例子,字符流在我的project里面,下文也是)

package com.IO;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;

public class FIleIOInputStream {
public static void main(String[] args) {
	File file=new File("a.txt");
	//用绝对路径选择一个文件
	try {
		InputStream in=new FileInputStream(file);
		byte[] b = new byte[20];
		//建立一个水桶
		int size=0;
		try {
			while ((size=in.read(b))!=-1) {
				System.out.println(new String(b, 0, size));
				//String的截取字符串,我很快就会去整理关于String的方法
						}
			in.close();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	} catch (FileNotFoundException e) {
		// TODO Auto-generated catch block
		e.printStackTrace();
	}	
	}
	}  

其中read(byte b[])方法中的只放一个字节数组的方法其实也是

public int read(byte b[]) throws IOException {
        return read(b, 0, b.length);
    }
    然后如果你再打开 read(b, 0, b.length);的源码你会看到
    public int read(byte b[], int off, int len) throws IOException {
        if (b == null) {
            throw new NullPointerException();
        } else if (off < 0 || len < 0 || len > b.length - off) {
            throw new IndexOutOfBoundsException();
        } else if (len == 0) {
            return 0;
        }
        int c = read();
        if (c == -1) {
            return -1;
        }
        b[off] = (byte)c;
       int i = 1;
        try {
            for (; i < len ; i++) {
                c = read();
                if (c == -1) {
                    break;
                }
                b[off + i] = (byte)c;
            }
        } catch (IOException ee) {
        }
        return i;
    }

他也是显示了先进行判断看看他是否读完,如果读完就返回-1,如果没有读完就进行循环
简单的输出流小demo

package com.IO;

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

public class FileIOOutputStream {
public static void main(String[] args) {
	File f=new File("a.txt");
	try {
		OutputStream out=new FileOutputStream(f);
		byte []b={23,4,45,6,57,75,67};
		try {
			out.write(b);
			out.close();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	} catch (FileNotFoundException e) {
		// TODO Auto-generated catch block
		e.printStackTrace();
	}
	
}
}

输入文件时,如果输出汉字,会出现乱码现象,因为一个汉字占两个字节,我的编码格式已经转了utf-8,一会我会把我的源码穿上来,如果你们的eclipse没有改默认的话你导入我的项目我的所有的中文也会变成乱码
如果真的要使用OutputStream可以使用他得子类FileOutputStreamWriter,用法很简答我在这里就不一一解释了
关闭输出流除了可以保证流资源被回收,可能还可以将输出流缓冲区中的数据 flush到物流节点里(在结束之前自动执行flush()).
流关闭的原因是因为程序打开的文件的IO流资源不属于内存资源,垃圾回收机制无法回收,所以应该显示关闭文件的IO资源.
这就是最基础的IO流至于更高级的包装流之类的下次再整理了,有什么不对的请多多支出.

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

又是重名了

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值