io读取的输入输出,InputStream ,OutputStream 的read(),write()方法的详细介绍

本文详细探讨了Java中的IO流,特别是InputStream和OutputStream的read()和write()方法。在实际运行中,read()方法会阻塞等待用户输入,将字节读取到缓冲区,最大读取4个字节。而write()方法用于将数据写入输出流。通过这些方法,可以实现字节级别的数据输入与输出操作。

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

今天复习io 流 遇到一些问题,分享一下,有关字节的读取,输入操作。

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;


public class Demo {
	
	public static void main(String[] args) {
		
		//字节的输出输出流
		
		InputStream is = System.in;//标准的输入流对象   --读取操作
		OutputStream os = System.out;//标准的输出流对象---写的操作
		
		
		try {
			byte[] buffer = new byte[10]; //缓冲区  // 0 1 2 3 4 5 6 7 8 9 
			
			int len = 0;//读取之后的实际长度 //在UTF8编码下,回车\r   换行\n 也各占1个字节
			
			/*
			 * read方法参数:
			 *  b - 读入数据的缓冲区。
			 *  off - 数组 b 中将写入数据的初始偏移量。
			 *  len - 要读取的最大字节数。 
			 */
			while((len=is.read(buffer,0,4))!=-1){ //buffer缓冲区读入进去 2位置开始  0 1 2
				System.out.println("读取的实际长度--------------------------"+len);
				os.write(buffer, 0, 4); //buffer缓冲区写进去 2位置开始
				System.out.println("--------------------------");
			}
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

} 


运行效果   刚运行程序会处于阻塞状态——如下图,当键盘输入信息时,程序会继续执行,如下图分析下图输出的信息 



第一行-------读取的实际长度--------------------------4 这是InputStream 输入流读取到的字节长度,并写入buffer缓存中 ,输入流调用了read方法   其读取的最大字节数 为4  故显示为    4      

    public int read(byte[] b,

                               int off,

                               int len) throws IOException    


参数:
    b - 读入数据的缓冲区。
    off - 数组 b 中将写入数据的初始偏移量。
    len - 要读取的最大字节数。

  第二行-------1234------------------------------         这是OutputStream输出流从buffer缓存中读取并在控制台显示读取的结果,输出流,  由于此时调用的write方法是 printStream 的方法,它 重写了父类OutputStream的write方法, 这是java种多态 的体现!  这里的len=4 故读取出来四个字节的数据并显示。

public void write(byte[] buf,
                  int off,
                  int len)

    buf - byte 数组
    off - 相对于开始写入字节处的偏移量
    len - 要写入的字节数

第三行   显示 ‘5’其实后面还跟着 回车 和 换行(在UTF8编码下,回车\r   换行\n 也各占1个字节) 所以此行显示的是'5、\r、\n' 为三个字节,故此时覆盖buffer中
 的前三个字节,此时控制台显示的应为四个字节---所以在\r,\n即 回车换行后输出4,也就是您所看到的的第四行结果!
  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值