Java之I/O流
来源:互联网 发布:师范 校园网络电视 编辑:程序博客网 时间:2024/04/30 20:44
学习IO一直零零散散的,今天特地看教程、翻阅资料做笔记整理下I/O这块。
IO流用来处理设备间的数据传输。Java程序用“流”的方式进行数据输入、输出操作。java.io包下提供各种“流”类和接口获取不同种类的数据,并通过标准的方法输入输出数据。
数据流的API结构
流的分类
IO流体系
>字节流和字符流
字节流读取时,读到一个字节就返回一个字节,可以处理所有类型数据,如文本、图片、mp3、avi等;
字符流能读到多个字节(中文对应字节数是2个,UTF-8码表是3个字节),先查指定编码表,将查到字符返回。只能处理字符数据,处理纯文本数据优先考虑使用字符流,其他类型数据用字节流。
>节点流(直接作用于文件的)和处理流
>四大抽象基类及常用方法
>文件流(节点流)
|-FileInputStream |-FileOutPutStream
|-FileReadr |-FileWriter
示例代码
package com.afy.iodemo;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.IOException;public class FileInputOutputStreamDemo { public static void main(String[] args) throws IOException { FileInputStream fis = new FileInputStream("a.gif"); FileOutputStream fos = new FileOutputStream("b.gif"); byte input[] = new byte[50]; while (fis.read(input)!=-1) { fos.write(input); } fis.close(); fos.close(); System.out.println("done"); }}
package com.afy.iodemo;import java.io.File;import java.io.FileNotFoundException;import java.io.FileReader;import java.io.FileWriter;import java.io.IOException;public class FileReaderWriterDemo { public static void main(String[] args) { FileReader fr = null; FileWriter fw = null; char c[] = null; int len; try { File src = new File("yoyo.txt"); File dest = new File("yoyo1.txt"); fr = new FileReader(src); fw = new FileWriter(dest); c = new char[40]; } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } try { while ((len=fr.read(c))!=-1) { fw.write(c,0, len); } fw.close(); fr.close(); } catch (IOException e) { e.printStackTrace(); } }}
>缓冲流
|-BufferedInputStream |-BufferedOutputStream
|-BufferedReader |-BufferedWriter
属于处理流的一种,可以提高读写效率
示例代码:
package com.afy.iodemo;import java.io.BufferedInputStream;import java.io.BufferedOutputStream;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.IOException;public class BufferedInputOutputDemo { public static void main(String[] args) { try { FileInputStream fis = new FileInputStream("reread.wmv"); BufferedInputStream bis = new BufferedInputStream(fis,1000000); FileOutputStream fos = new FileOutputStream("newmovie.wmv"); BufferedOutputStream bos = new BufferedOutputStream(fos,1000000); byte input[] = new byte[100000]; int count = 0; long before = System.currentTimeMillis(); while (bis.read(input)!=-1) { count++; bos.write(input); } System.out.println(count+"次"); System.out.println("读取时间为:"+(System.currentTimeMillis()-before)+"ms"); bis.close(); fis.close(); bos.close(); fos.close(); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } }}
BufferedReader和BufferedWriter示例与上例类似,其中BufferedReader提供readLine()方法来读取一行字符串,BufferedWriter虽有提供write(String sr)方法,但无法写出一行字符串,只能用打印流PrintWriter中的println(String x)方法写出一行字符串。要注意的是在使用缓冲流写出数据的时候,当写出的数据还没填满缓冲区时,缓冲区里的内容有时候是不会写到文件里的,会造成在写出文件时文件部分丢失,解决方法是在完成写出操作后调用相应流的fluch()方法将当前缓冲区所有的内容进行强制输出。
>转换流
|-InputStreamReader 字节流转字符流
|-OutputStreamWriter 字符流转字节流
首先它们是字符流,然后InputStreamReader的read()方法没有提供读取一个字符串的方法,直接读取一个或一行字符串会变得很麻烦,解决方案是BufferedReader的readLine()方法,一次读一行,到行标记时,将行标记之前的字符数据作为字符串返回。当读到末尾时,返回null。然而在使用BufferedWriter中的write(String,str)写出字符串时却并没有写出换行的字符串;同样,OutputStreamWriter的write()方法中虽然有write(String str)方法,但也无法写出一行字符串,这样写出的文本没法换行。解决方案是PrintWriter类(打印流)中的println(String x)方法,
>难点易混淆点
|->BufferedReader中的readLine()方法
|->PrintWriter中的println(String x)<方法
|->写出文件后添加的相应流的flush()方法
>遗留问题
|-字节流的read()方法读取一个字节为什么返回的是int类型,而不是byte类型?
|-write()方法一次写入一个字节,接收的是一个int类型的数值,但只保留原字节,并在剩余二进制位补0?
^_^你造这是神马鬼吗?Please tell me,thx!
- Java之I/O流
- Java之I/O流
- Java之I/O
- java之I/O
- java之旅之I/O流
- java I/O流之字符流
- java 基础之I/O流
- java I/O流之文件操作
- Java I/O之文件流
- java学习之I/O流
- Java之I/O流小结
- java基础之I/O流
- java之I/O输入输出流解析
- Java I/O系统之转换流
- Java I/O系统之转换流
- Java I/O系统之Print 流
- Java I/O系统之Object流
- java复习之I/O流
- java中为什么byte的取值范围为-128~127
- Cocoa pods的安装和使用
- QSS样式(1)
- Java and C++
- oralce 表空间常用操作(查询 删除 增加)
- Java之I/O流
- GLSurfaceView基础学习笔记
- 通知
- 4Toxophily
- linux&shell
- memset()函数及其作用
- C++基础实践一之旱冰场造价
- 线程属性pthread_attr_t简介
- 用VS2015(vs14)开发PHP7扩展(转+)