IO流简单使用

输入和输出是相对于程序来说的,读取到程序中叫做输入,写到文件中叫输出.

InputStream 字节输入流

InputStream 字节输入流基类,是字节输入流所有类的超类

// 从输入流中读取数据中下一个字节

abstract int read();

// 读取一定数量的字节,并将其缓冲到 b 数组中

int read(byte[] b);

// 读取最多 len 个字节,并并将其缓冲到 b 数组中

int read(byte[] b, int off, int len);

// 跳过或丢弃数据中 n 个字节

long skip(lone n);

// 关闭流并释放流关系中所有资源

void close();

OutputStream 字节输出流

OutputStream 字节输出流基类,是字节输出流所有类的超类

// 讲指定的字节写入输出流

abstract void write(int b);

// 将 b.length 个字节从 b 中写入输出流中

void write(byte[] b);

// 将 b 数组下标 off(b[off]) 后 len 个字节写入输出流

void write(byte[] b, int off, int len)

// 刷新输出流并写出所有缓冲的输出字节数据

void flush();

// 关闭输出流,并释放输出流相关的资源

// 关闭之前,使用flush()写出缓冲的字节

void close();

Reader 字符输入流

Reader 字符输入流,是读取字符流的抽象类

// 读取单个字符

int read();

// 将字符读入数组

int read(char[] cbuf);

// 将 len 个字符读到char数组下标 off 后面

abstract int read(char[] cbuf, int off, int len);

// 跳过n个字符

long skip(long n);

// 关闭字符流,并释放相关的资源

abstract void close();

Writer 字符输出流

Writer 字符输出流,是写入字符流的抽象类

// 将 char 数组写入字符流

void write(char[] cbuf);

// 将 char 数组下标 off 后 len 个字符写入字符流

abstract void read(char[] cbuf, int off, int len);

// 写入单个字符

void write(int c);

// 写入字符串

void write(Stirng str);

// 写入字符串的某一部分

// 也是将 string 转成 char 然后执行 read(char[] cbuf, int off, int len);

void write(String str, int off, int len);

// 将指定的字符序列附加到此 Wirter

Writer append(CharSequence csq);

// 将指定字符序列的子序列追加到此 Writer

Writer append(CharSequence csq, int start, int end)

// 将指定字符追加到此 Writer

Writer append(char c);

// 刷新流的缓冲

abstract void flush();

// 关闭流,但是要刷新该流,否则关闭时会报错 IOException

abstract void close();

实例

实例不全,需自己动手探讨其中的奥秘

实例中使用了junit等注解,我在这里贴一。也可以不用,就是吧log换成println多写几个类

org.projectlombok

lombok

1.18.12

ch.qos.logback

logback-classic

1.2.3

junit

junit

4.13

import lombok.extern.slf4j.Slf4j;

import org.junit.Before;

import org.junit.Test;

import java.io.*;

/**

* @author http://cnblogs.com/beixuan

*/

@Slf4j

public class StreamTest {

private static String fileName = "D:/Stream.txt";

private static String fileName1 = "D:/Reader.txt";

private static String fileName2 = "D:/红色高跟鞋.mp3";

@Before

public void getFile(){

File file = new File(fileName);

if (!file.exists()){

try {

//创建文件

file.createNewFile();

log.debug("创建文件成功:{}", fileName);

} catch (IOException e) {

e.printStackTrace();

}

}

File file1 = new File(fileName1);

if (!file1.exists()){

try {

//创建文件

file1.createNewFile();

log.debug("创建文件成功:{}", fileName1);

} catch (IOException e) {

e.printStackTrace();

}

}

}

/**

* 字节输出流

*/

@Test

public void testOutputStream(){

FileOutputStream fos = null;

try {

fos = new FileOutputStream(fileName);

fos.write("Hello world".getBytes());

} catch (IOException e) {

e.printStackTrace();

} finally {

//刷新缓冲区

if (fos != null) {

try {

fos.flush();

log.debug("写入数据成功");

fos.close();

} catch (IOException e) {

e.printStackTrace();

}

}

}

}

/**

* 字节输入流

*/

@Test

public void testInputStream(){

FileInputStream fis = null;

try {

fis = new FileInputStream(fileName);

int i = 0;

StringBuffer sb = new StringBuffer();

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

// i是字符对应的ASCII码

sb.append((char) i);

}

log.debug("{}:\n{}", fileName, sb.toString());

} catch (IOException e) {

e.printStackTrace();

} finally {

if (fis != null) {

try {

fis.close();

} catch (IOException e) {

e.printStackTrace();

}

}

}

}

/**

* 字符输出流

*/

@Test

public void testWriter(){

OutputStreamWriter osw = null;

try {

osw = new OutputStreamWriter(new FileOutputStream(fileName1));

osw.write("可以输出中文哦!\n\r\t还又'\\n\\r\\t'");

} catch (IOException e) {

e.printStackTrace();

} finally {

if (osw != null){

try {

osw.flush();

osw.close();

} catch (IOException e) {

e.printStackTrace();

}

}

}

}

/**

* 字符输入流

*/

@Test

public void testReader(){

// InputStreamReader 转换流

InputStreamReader isr = null;

try {

isr = new InputStreamReader(new FileInputStream(fileName2));

StringBuffer sb = new StringBuffer();

int i;

while ((i = isr.read()) != -1){

sb.append((char)i);

}

log.debug("{}:\n{}", fileName2, sb);

} catch (Exception e) {

e.printStackTrace();

} finally {

if (isr != null){

try {

isr.close();

} catch (IOException e) {

e.printStackTrace();

}

}

}

}

/**

* 高效流对比

*/

@Test

public void IoEquals() throws IOException{

//操作的是一个3.19MB的音频文件 它们之间文件越大,效果就越明显

/***********************************************************************/

FileInputStream fis1 = new FileInputStream(fileName2);

FileOutputStream fos1 = new FileOutputStream(fileName);

int i;

long startTime = System.currentTimeMillis();

while ((i = fis1.read()) != -1){

fos1.write(i);

}

long endTime = System.currentTimeMillis();

log.debug("第一种高效流:{}", endTime - startTime);

fos1.close();

fis1.close();

/***********************************************************************/

FileInputStream fis2 = new FileInputStream(fileName2);

FileOutputStream fos2 = new FileOutputStream(fileName);

byte[] bytes = new byte[1024];

startTime = System.currentTimeMillis();

while ((i = fis2.read(bytes)) != -1){

fos2.write(bytes, 0, i);

}

endTime = System.currentTimeMillis();

log.debug("第二种高效流:{}", endTime - startTime);

fos2.close();

fis2.close();

/***********************************************************************/

BufferedInputStream bis = new BufferedInputStream(new FileInputStream(fileName2));

BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(fileName));

startTime = System.currentTimeMillis();

while ((i = bis.read(bytes)) != -1){

bos.write(bytes, 0, i);

}

endTime = System.currentTimeMillis();

log.debug("第三种高效流:{}", endTime - startTime);

bos.close();

bis.close();

/**

* 第一种高效流:20186

* 第三种高效流:30

* 第二种高效流:10

* 这么对比下 BufferedInputStream BufferedOutputStream 是最好的配合

*/

}

}

小结

字节流常用于图片、音频、视频文件及PPT、Word文件.

字符流常用于处理文本类型的文件如txt、ini文件等

字节流也可以处理纯文本文件,但字符流不可以处理图片视频等非纯文本类型的文件

java中io流案例_Java IO流的简单使用 通俗易懂 超详细 【内含案例】相关推荐

  1. Java中的File类和IO流

    Java中的File类和IO流 File类 java.io.File 类是文件和目录路径名的抽象表示,主要用于文件和目录的创建.查找和删除等操作. File的分隔符 import java.io.Fi ...

  2. java中的i/o体系结构及流分类

    Java中IO流的体系结构如图: 在整个Java.io包中最重要的就是5个类和一个接口.5个类指的是File.OutputStream.InputStream.Writer.Reader:一个接口指的 ...

  3. 【java】java中内存映射文件和IO

    转载:https://leokongwq.github.io/2017/02/25/java-memorymapped-file-and-io.html 对大多数Java开发人员来说,Java中的内存 ...

  4. keil5中找不到或没有对应的芯片怎么办?超详细!!

    keil5中找不到或没有对应的芯片怎么办?超详细!! 安装完Keil5之后,有的小伙伴们是不是会发现,为什么新建工程的时候找不到自己想要的CUP型号,如下图: 这里就假设要找的CUP型号是三星的S3C ...

  5. java io流大全_Java IO流系统整理

    Java IO流的分类 Java中的流,可以从不同的角度进行分类. 按流向分类: 输入流: 程序可以从中读取数据的流. 输出流: 程序能向其中写入数据的流. 按数据传输单位分类: 字节流:以字节(8位 ...

  6. java 流 中文_Java IO流之中文乱码

    相信有过学过JavaEE的人们都有遇到过中文乱码问题吧,最简单的就是表单数据提交时中文出现乱码,乱码难解决吗?其实不难,只要掌握好编码的设置,乱码神马的一边去. 今天主要就讲讲一些常用的可以设置编码的 ...

  7. java io框架图_Java IO流体系继承结构图解析

    Java IO体系结构看似庞大复杂,其实有规律可循,要弄清楚其结构,需要明白两点: 1. 其对称性质:InputStream 与 OutputStream, Reader 与 Writer,他们分别是 ...

  8. java中什么是字节流和字符流_java中字节流与字符流的区别是什么

    字节(Byte)是进行io操作的基本数据单位,在程序进行字节数据输出时可以使用OutputStream类完成 此类定义如下: public abstract class OutputStream ex ...

  9. java中什么方法用来清空流_这个真的写的很细,JavaIO中的常用处理流,看完只有10%的人还不懂了...

    JavaIO中的常用处理流 在前面,我们了解了有关JavaIO流基础的使用,其中对于IO流来说最基础的四大基类就是InputStream.OutputStream.Reader.Writer.而我们对 ...

最新文章

  1. Reddit引入Envoy支持架构改造,性能显著提升
  2. 只缺一个程序员 如何让产品实现
  3. linux中rm删除的文件是否可以恢复,Linux下用rm删除的文件的恢复方法
  4. STP文件服务器,综合监控stp服务器
  5. 如何评价一个推荐系统的好坏?
  6. 字符串分割--java中String.split()用法
  7. c语言long说明符,C语言-类型说明符 long,short,unsigned,signed
  8. arcmap中使用python_ArcMap - 使用python更新列中的值
  9. webplayer 设置加载图标和屏蔽右键
  10. 吴恩达神经网络和深度学习-学习笔记-27-多任务学习
  11. vue3 three ts 全景图
  12. 【操作系统】王道考研 p22-26 生产者消费者问题、多生产者多消费者问题、吸烟者问题、读者写者问题、哲学家进餐问题
  13. 寒山是一位高僧,拾得是一位和尚。
  14. 初学python:输入某年某月某日,判断这一天是这一年的第几天
  15. java线程中的tid_jstack中的tid到底是什么意思呢
  16. 掌握el-table的formatter方法,提升数据展示效果
  17. 计算机网卡更改mac地址,Mac电脑网卡MAC地址修改的具体步骤
  18. MFC win32 API串口同步模式代码示范
  19. svn查看ip linux,查看svn服务器的ip地址
  20. 模拟抽奖过程的C语言程序设计,C++抽奖程序实现方法

热门文章

  1. java web接收POST数据
  2. 数据挖掘之3种数据归一化方法及代码实现
  3. Flask实战2问答平台-完成登录注册功能
  4. oracle 怎么判断是不是第一条记录_怎么判断自己是不是阳痿呢?防治阳痿的5个方法值得一试...
  5. LibSVM学习(二)——第一次体验libSvm
  6. [uEnv.txt]在uEnv.txt文件中使用if语句实现Image/dtb文件切换
  7. ubuntu9.10升级成功
  8. DevExpress v17.2新版亮点——CodeRush篇(二)
  9. 循环获取枚举值和名称
  10. iOS提交应用至App Store流程及真机调试 一,证书、配置文件