黑马程序员--字节流
来源:互联网 发布:网络新词及意思和出处 编辑:程序博客网 时间:2024/04/25 17:09
一、字节流
InputStream
|---FileInputStream:从文件系统中的某个文件中获得输入字节。
|---FilterInputStream:包含其他一些输入流,它将这些流用作其基本数据源,它可以直接传输数据或提供一些额外的功能。
|---BufferedInputStream:该类实现缓冲的输入流。
|---ObjectInputStream:对象流
|---PipedInputStream:管道流
OutputStream
|---FileOutputStream:文件输出流是用于将数据写入 File
|---FilterOutputStream:此类是过滤输出流的所有类的超类。
|---BufferedOutputStream:该类实现缓冲的输出流。
|---PrintStream:
|---DataOutputStream:
|---ObjectOutputStream:
|---PipedOutputStream:
字节流用于写入写出二进制文件。
FileOutputStream读取常用的方法
1读取单个字节:int read();
2将数据读入到数组中:int [ ]read(byte buf)
3特殊方法:intavailable();方法可以不受阻塞地从此输入流中读取(或跳过)的估计余字节数;
FileOutputStream 字符输出常用的方法
方法:voidwrite(int b ); 将指定字节写入此文件输出流
复制一个图片文件:
public class Test5 {
public static void main(String[] args){
FileInputStream fis=null;
FileOutputStream fos=null;
try{
//创建字节输入流对象
fis=new FileInputStream("c:/test.jpg");
//创建字节输出流对象
fos=new FileOutputStream("d:/test.jpg");
//定义缓冲区大小
byte [] buf=newbyte[1024];
int len=0;
//通过循环读写,完成数据的存储
while((len=fis.read(buf))!=-1){
fos.write(buf,0,len);
}
}catch(IOException e){
throw new RuntimeException("复制文件失败");
}finally{
try{
if(fis!=null){
fis.close();
}
}catch(IOException e){
throw new RuntimeException("读取关闭失败");
}
try{
if(fos!=null){
fos.close();
}
}catch(IOException e){
throw new RuntimeException("写入关闭失败");
}
}
}
}
二、字节流缓冲区
利用缓冲流拷贝MP3文件
public class Test6 {
public static void main(String... args)throws IOException {
//定义输入缓冲区
BufferedInputStream is = new BufferedInputStream(new FileInputStream(
"C:\\test.mp3"));
//定义输出缓冲区
BufferedOutputStream os = new BufferedOutputStream(
new FileOutputStream("D:\\test.mp3"));
for (int by = 0; (by = is.read()) != -1;) {
os.write(by);
}
is.close();
os.close();
}
}
三、字节和字符转换流
字节和自己直接的转换使用转换流来完成,特别是设计到两种字符编码不同,就需要转换流完成编码方式的转换。
通过转换流从键盘读取数据:
public class Test7 {
public static void main(String...args)throws IOException{
BufferedReader bufr = new BufferedReader(new InputStreamReader(
System.in));
BufferedWriter bufw = new BufferedWriter(new OutputStreamWriter(
System.out));
for (String line =null; (line = bufr.readLine()) !=null;) {
if ("over".equals(line))
break;
bufw.write(line);
bufw.newLine();
bufw.flush();
}
bufr.close();
bufw.close();
}
}
流操作的基本规律:
1. 明确源和目的
源:输入流 InputStream Reader
目标:输出流 OutputStream Writer
2. 操作的数据是不是纯文本
是:字符流;不是:字节流
四、IO流的使用到的装饰设计模式
1、当想要对已有对象进行功能增强时,可以定义一个类,将已有对象传入,基于已有的功能,并提供加强功能,那么该自定义类称为装饰类。
2、装饰类通常会通过构造方法接收被装饰的对象。并基于被装饰的功能,提供更强的功能。
装饰和继承的区别:
继承的子类都具有父类的功能,装饰是对原来类功能的增强,不一定具有原来类的功能。装饰模式比继承灵活,Java中只能单继承,装饰模式避免了这个缺点。
- 黑马程序员--字节流
- 黑马程序员--字节流
- 黑马程序员_字节流
- 黑马程序员---IO--字节流
- 黑马程序员__IO(字节流)
- 黑马程序员_字节流
- 黑马程序员_83_IO字节流
- 黑马程序员-day20-字节流
- 黑马程序员:IO流之字节流
- 黑马程序员 IO流-->字节流
- 黑马程序员_IO_字节流&转换流
- 黑马程序员--IO流02--字节流
- 黑马程序员--IO流--字节流
- 黑马程序员_IO流字节流
- 黑马程序员-day19-IO流(字节流)
- 黑马程序员:字符流与字节流
- 黑马程序员:IO流之字节流
- 黑马程序员--IO流之字节流
- Do a barrel roll
- eclipse相关设置
- App内存泄漏问题
- 最长公共子序列(LCS)问题
- C语言数组笔记
- 黑马程序员--字节流
- DataGridView 密码列(显示为*号)的设置
- hibernate 分页的两种方法
- 计算机视觉资源汇总 - Part IV(期刊会议)
- 提交按钮动画效果(基于SVGi)
- java开源工具:网站开发工具清单
- mount: you must specify the filesystem type
- 约瑟夫环算法用面向对象的一种实现
- 为什么要用Bootstrap