Java笔记第五弹
字节流读数据(一次读一个字节数据)
步骤:1、创建字节流输入流对象
2、调用字节输入流对象的读数据方法
3、释放资源
相关应用:
FileInputStream fis=new FileInputStream("myByteStream\\fos.txt");//创建输入流对象
int by=fis.read();//一次只能读到一个字节数据
System.out.println(by);//输出int类型
System.out.println((char)by);//输出char类型
fis.close();
//数据读取到达文件末尾,输出-1
//连续读取数据
FileInputStream fis=new FileInputStream("");//创建输入流对象
int by=fis.read();//一次只能读到一个字节数据
System.out.println((char)by);
by=fis.read();
System.out.println((char)by);
fis.close();
//优化
FileInputStream fis=new FileInputStream("");//创建输入流对象
while((int by=fis.read())!=-1){
System.out.println((char)by);
by=fis.read();
}
fis.close();
案例:复制文本文件
import java.io.*;
public class Main {
public static void main(String[] args) throws IOException {
FileInputStream fis=new FileInputStream("E:\\itcast\\窗里窗外.txt");
FileOutputStream fos=new FileOutputStream("myByteStream\\窗里窗外.txt");
int by;
while((by=fis.read())!=-1){
fos.write(by);
}
fis.close();
fos.close();
}
}
字节流读数据(一次读一个字节数组数据)
import java.io.*;
public class Main {
public static void main(String[] args) throws IOException {
FileInputStream fis=new FileInputStream("myByteStream\\fos.txt");//创建输入流对象
byte[] by=new byte[1024];//一般是1024及其整数倍
int len;
while((len=fis.read())!=-1){//循环
System.out.println(new String(by,0,len));
}
fis.close();
}
}
案例:复制图片
import java.io.*;
public class Main {
public static void main(String[] args) throws IOException {
FileInputStream fis=new FileInputStream("E:\\itcast\\mn.jpg");
FileOutputStream fos=new FileOutputStream("myByteStream\\mn.jpg");
byte[] by=new byte[1024];
int len;
while((len=fis.read(by))!=-1){
fos.write(by,0,len);
}
fis.close();
fos.close();
}
}
字节缓冲流
//构造方法
//缓冲输出流
BufferedOutputStream(OutputStream out);
//缓冲输入流
BufferedInputStream(InputStream in);
//写数据
import java.io.*;
public class Main {
public static void main(String[] args) throws IOException {
//FileOutputStream fos=new FileOutputStream("myByteStream\\fos.txt");
BufferedOutputStream bos=new BufferedOutputStream(new FileOutputStream("myByteStream\\fos.txt"));
bos.write("hello/r/n".getBytes());
bos.write("world/r/n".getBytes());
bos.close();
}
}
//读数据
import java.io.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedInputStream bos=new BufferedInputStream(new FileInputStream("myByteStream\\fos.txt"));
//一次读取一个字节数据
int by;
while((by=bos.read())!=-1){
System.out.println((char)by);
}
//一次读取一个字节数组
byte[] by1=new byte[1024];
int len;
while((len=bos.read(by1))!=-1){
System.out.println(new String(by1,0,len));
}
bos.close();
}
}
案例:复制视频
import java.io.*;
public class Main {
public static void main(String[] args) throws IOException {
//记录开始时间
long startTime=System.currentTimeMillis();
//复制视频
method1();
//记录结束时间
long endTime=System.currentTimeMillis();
System.out.println("共耗时:"+(endTime-startTime)+"毫秒");
}
public static void method1() throws IOException {
BufferedOutputStream bos=new BufferedOutputStream(new FileOutputStream("myByteStream\\字节流复制图片.avl"));
BufferedInputStream bis=new BufferedInputStream(new FileInputStream("E:\\itcast\\字节流复制图片.avl"));
//字节数据
int by;
while((by=bis.read())!=-1){
bos.write(by);
}
//字节数组数据
byte[] by1=new byte[1024];
int len;
while((len=bis.read(by1))!=-1){
bos.write(by1,0,len);
}
bos.close();
bis.close();
}
}
字符流
为什么出现字符流?
字符流=字节流+编码表
汉字在存储时,无论选择哪一种编码进行存储,第一个字节都是负数;