温故而知新(六)Java基础:IO流(此文章暂时未写完)

原创 2017年09月08日 15:02:33

输入流和输出流的类层次图

这里写图片描述


I/O简介

Java提供了两种类型的输入输出流:一种是面向字节的流,数据的处理以字节为基本单位;另一种是面向字符的流,用于字符数据的处理。

  • 字节流
    字节流(Byte Stream)每次读写8位二进制数,也称为二进制字节流

  • 字符流
    字符流一次读写16位二进制数,并将其做一个字符而不是二进制位来处理

    注意:为满足字符的国际化表示,Java语言的字符编码采用的是16位的Unicode码,而普通文本文件中采用的是8位ASCⅡ码


常用I/O流

从上图可以看出,流的结构层次来说有很多。这里只介绍常用的几种。

字节流

  • InputStream字节输入流
FileInputStream : 从文件中读取的输入流
BufferedInputStream : 缓存输入流 

//构造方法

InputStream f = new FileInputStream("D:/aa.apk");
//或:
File f = new File("D:/aa.apk");
InputStream out = new FileInputStream(f);

常用方法:

这里写图片描述

  • OutputStream字节输出流
FileOutputStream : 写入文件的输出流
BufferedOutputStream : 缓冲输出流   

//构造方法
 // 创建一个向指定File对象表示的文件中写入数据的文件输出流
    FileOutputStream(File file)
    // 创建一个向指定File对象表示的文件中写入数据的文件输出流
    FileOutputStream(File file, boolean append)
    // 创建一个向具有指定名称的文件中写入数据的输出文件流
    FileOutputStream(String name)
    // 创建一个向具有指定name的文件中写入数据的输出文件流
    FileOutputStream(String name, boolean append)

常用方法:

这里写图片描述


字符流

  • Reader字符输入流
InputStreamReader :(转换流)将字节转换到字符的输入流 ——> FileReader : 从文件读取的输入流
BufferedReader : 缓冲输入字符流
  • Writer 字符输出流
OutputStreamWriter:(转换流)将字节转换到字符的输出流 ——> FileWriter: 输出到文件的输出流
BufferedWriter: 缓冲输出字符流

使用详解

  • FileInputStream / FileOutputStream
public class Test {
    public static void main(String[] args) {
        try {
            long timeMillis = System.currentTimeMillis();
            InputStream is = new FileInputStream("D:/aa.apk");
            OutputStream os = new FileOutputStream("D:/ec.apk");
            /**
             * 指定数组的大小,一次读取一个数组 之所以用1024,因为在计算机下的表示二进制,编译器你这些2的幂次方得数据处理特别快。
             */
            /**
             * 1024*1024(是1m)和 1024*1024*1024 (10m) 这样读取文件时他们的速度为什么会比4*1024慢,影响的原因是什么
             * 如果是1m或更大,这样读写时相当于先读1M在写1M,这样循环速度就慢了,但是循环次数也少了。
             * 
             * 
             * 数组大在内存中长度就越大,站的内存也越大,但是循环次数减少。 数组小在内存中长度就越小,占的内存小,但是循环次数变多了。
             * 
             * 
             * 数组给的太大也不好,太小也不好。所以影响读写速度的关键在于设备当前的内存和cpu来决定速度的
             * 
             */
            byte[] i = new byte[4 * 1024];// 作为一个缓冲区
            int i2 = 0;
            try {
                while ((i2 = is.read(i)) != -1) {
                    System.out.print(new String(i, 0, i2) + " ");// AB CD
                    os.write(i, 0, i2);
                }
                is.close();
                os.close();
                long timeMillis1 = System.currentTimeMillis();
                System.out.println(String.valueOf(timeMillis1 - timeMillis) + ">>>>>>>>>>>");
            } catch (IOException e) {
                e.printStackTrace();
            }
        } catch (FileNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
}
版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

Java温故而知新之IO操作

对程序语言的设计者而言,创建一个好的输入输出(I/O)系统是一项艰难的任务。 -----------引自《java编程思想》 这是因为,其中的困难不仅在于各种I/O源端和想要与之通信的接收端(文件、...

Java 程序员 必备基础知识 温故而知新

前言正文 自我介绍数据结构和算法Java篇Java EE知识点储备计算机网络操作系统数据库相关XML常识性知识 总结 前言 准备了接近两个月的面试笔试,现在终于...
  • ljj_9
  • ljj_9
  • 2017年04月27日 18:36
  • 642

Android相关问题的好文章整理——温故而知新,可以为师矣

本篇文章将持续更新,收集我看过的写的非常好的文章,以便日后查阅回顾。 CSDN各大专家的Blog都是一个个的宝库,从现在开始,启动Blog“屠戮”计划,毕业之前,研究完所有移动开发专家Blog...

关于短信资源文档的下载未写完

  • 2010年03月23日 08:11
  • 3.85MB
  • 下载

LoG, DoG, Pyramid 与SIFT 算法【未写完, 暂停更新】

主要内容是讲SIFT-----Scale Invariant Feature Transformation 所以这里把需要的知识讲一讲...

Android 原始码下载(未写完, 待续)

要研究Android 原码,需要 如 Neo  FreeRunner (这是一款专门针对开发者与教育用途所使用的开发平台)  开发者手机.进而取得 Android 原始码、编译、实机测试. 本文介绍...
  • aduovip
  • aduovip
  • 2012年06月09日 00:55
  • 837

全面覆盖java-IO基础的文章实例

  • 2011年08月20日 10:45
  • 25KB
  • 下载

SQL温故而知新-基础篇

SQL温故而知新-基础篇 what is sql? SQL 指结构化查询语言 SQL 使我们有能力访问数据库 SQL 是一种 ANSI 的标准计算机语 知识点: RDBMS 指的是关系型数...

SQL基础 温故而知新

 /* 多行注释 */ --创建数据库 /* create database 数据库名称 on (  name='',  --逻辑名称  filename='',  --物理名...

温故而知新:Oracle基础知识复习(一)

1.基本查询语句 2.排序 SQL单行函数
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:温故而知新(六)Java基础:IO流(此文章暂时未写完)
举报原因:
原因补充:

(最多只允许输入30个字)