Java笔记 —— IO,linuxmakefile教程

本文介绍了Java中字节流和字符流的使用,包括FileInputStream、FileOutputStream、BufferedInputStream、BufferedOutputStream以及转换流的概念。重点讲述了何时使用字节流和字符流,以及如何通过转换流实现字节流与字符流之间的转换。通过示例代码展示了字节流和字符流在读写文件时的操作,包括数据追加、缓冲和编码解码过程。
摘要由CSDN通过智能技术生成

按照数据类型划分:

  1. 字节流 InputStream / OutputStream

字节流以byte(字节)为单位,进行输入或输出操作

InputStream字节输入流:读取数据。抽象类,是所有输入流的父类。定义了所有输入流都具有的共同特征。

OutputStream字节输出流:写出数据。抽象类,是所有输出流的父类。定义了所有输出流都具有的共同特征。

  1. 字符流 Reader / Writer

字符流以字符为单位,根据ASCII码表映射字符

Reader字符输入流:读取数据,抽象类

Writer字符输出流:写出数据,抽象类

什么时候使用字节流,什么时候使用字符流?

只要是处理纯文本数据,就优先考虑使用字符流。 除此之外都使用字节流。

文本文件,视频图片等在计算机中的存储方式都是字节,因此可以用windows自带的记事本打开需要上传或者下载的数据文件,如果里面的内容可以看懂,那么就用字符流。看不懂就用字节流。

字节输入流FileInputStream

FileInputStream是InputStream的子类,可以从文件流中读取数据。

这是jdk文档中对FileInputStream的作用的描述

在这里插入图片描述

构造方法:

FileInputStream(File file)

FileInputStream(String name)

读取方式:
  1. int read()

从该输入流读取一个字节的数据。

读取输入流的下一个字节,并返回字节表示的int值(0~255)。一个字节是八位,二进制的11111111转为十进制是255

  1. int read(byte[] b)

从该输入流读取最多 b.length个字节的数据为字节数组。

文件里面的内容是a,读取的结果是97,因为字节流的单位是字节byte,是一组二进制的数据,传输的实际内容是对应的ASCII码值。如果想查看具体是哪个字符,可以用char类型做强制转换

package review.IO;

import java.io.FileInputStream;

import java.io.IOException;

public class Demo1 {

public static void main(String[] args) throws IOException {

FileInputStream fis = new FileInputStream(“a.txt”);

System.out.println(fis.read()); //97

System.out.println((char)fis.read()); //b,已经读取过的字节a不会被反复读取,因此是b

//像上面这样读取太慢,用while循环改进

//当读到末尾时,fis.read()语句返回-1

int n = 0;

while((n=fis.read())!=-1){

System.out.print((char)n); //cdefg

}

//关闭流

fis.close();

}

}

package review.IO;

import java.io.FileInputStream;

import java.io.IOException;

public class Demo2 {

public static void main(String[] args) throws IOException {

FileInputStream fis = new FileInputStream(“a.txt”);

//数组长度用1024,这样比较合适,不会太长浪费资源,也不会太短

byte[] bytes = new byte[1024];

int len;

//用len接收fis.read(byte[] b)实际读取的字节长度

//读到文件末尾时返回-1

//(len =fis.read(bytes)注意这里用括号括住

//这里不会读取一个字节就打印s,因为是一次性读取一个字节数组

while((len =fis.read(bytes))!=-1){

//这里的长

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值