`
gaojingsong
  • 浏览: 1210744 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
文章分类
社区版块
存档分类
最新评论

【JAVA IO 流介绍】

阅读更多

一、JAVAIO关系图


 

二、IO流的分类

根据处理数据类型的不同分为:字符流和字节流

根据数据流向不同分为:输入流和输出流

 

三、字符流和字节流

字符流的由来: 因为数据编码的不同,而有了对字符进行高效操作的流对象。本质其实就是基于字节流读取时,去查了指定的码表。字节流和字符流的区别:

(1)读写单位不同:字节流以字节(8bit)为单位,字符流以字符为单位,根据码表映射字符,一次可能读多个字节。

(2)处理对象不同:字节流能处理所有类型的数据(如图片、avi等),而字符流只能处理字符类型的数据。

(3)字节流在操作的时候本身是不会用到缓冲区的,是文件本身的直接操作的;而字符流在操作的时候下后是会用到缓冲区的,是通过缓冲区来操作文件,我们将在下面验证这一点。

 

结论:优先选用字节流。首先因为硬盘上的所有文件都是以字节的形式进行传输或者保存的,包括图片等内容。但是字符只是在内存中才会形成的,所以在开发中,字节流使用广泛。

 

四、输入流和输出流

对输入流只能进行读操作,对输出流只能进行写操作,程序中需要根据待传输数据的不同特性而使用不同的流。

 

 

五、实际应用

1、文件复制实现与优化

BufferedInputStream/BufferedOutputStream

//read(byte[] buf)/out.write(byte[] buf, 0, int size)

 

2、字符串的序列化(文字的编码方案)

1) Stirng 字符串本质上是char[] 将char[] 转换成byte序列就是字符串的编码, 就是字符串的序列化问题,char是16位无符号整数, 值是unicode编码

 

2) utf-16be 编码方案, 将16位char从中间切开为2个byte, utf-16be是将unicode char[] 序列化为byte[]的编码

方案 能够支持65535 个字符编码, 英文浪费空间

char[] = ['A','B','中']

byte[] = [00, 41, 00, 42, 4e, 2d]

 

3) UTF-8 编码方案 采用变长编码 1~N方案, 其中英文1个byte中文3个byte

4) GBK 中国国标,支持20000+ 中日韩英, 英文1位编码,中文2位与unicode不兼容, 需要码表转换(散列表查询)

 

char[] = ['A','B','中'] //4e2d

GBK(GB2312): {41,42,d6,d0},

 

3、认识文本和文本文件

1) java的文本(char)是16位无符号整数, 是字符的unicode编码

2) 文件是byte by byte 的数据序列

3) 文本文件是 文本char 序列按照某种(utf-8,utf-16be, gbk)方案序列化为byte的存储结果.

 

5 字符流(Reader Writer)

1) 字符的处理, 一次处理一个字符(unicode)

2) 字符的底层仍然是基本的字节流

3) 字符流的基本实现:

InputStreamReader:完成byte流解析为char流, 按照

 

编码解析

OutputStreamWriter:提供char流到byte流, 按照

编码处理

 

4) 字符流的处理流

是字符读写的功能扩展, 极大的方便了文本的读写操作

BufferedReader : readLine()//一行一行的读取,

如果读取到文件的结尾,返回值是null

PrintWriter: println(内容)//每一行内容就换行

 

5)读取一个文本文件:

InputStream is =new FileInputStream("gbk.txt");

Reader in =new InputStreamReader(is);

BufferedReader reader =ew BufferedReader(in);

or

BufferedReader in = new BufferedReader(ew FileReader(filename));

 

6) 写出一个文本文件:

PrintWriter out =new PrintWtirer(new FileWriter(filename));

or

PrintWriter out =new PrintWtirer(ew OutputStreamWriter(new FileOutputStream(filename)));

 

7) 系统的默认编码 中文一般是GBK

String encoding=System.getProperty("file.encoding");

 

6 对象的序列化: 将Object转换为byte序列,就是序列化,

反之叫反序列化

1) 序列化流, 是过滤流

ObjectOutputStream writeObject(Object)

序列化对象

ObjectInputStream readObject()

对象的反序列化

2) 序列化接口: 对象必须实现"序列化接口"才能进行

"序列化"否则出现不能序列化的异常!

 

3) JavaBean 规范, 必须实现Serializable接口

Java API中的类大多是Java Bean, 基本都实现了

Serializable

 

7 浅层复制与深层复制

1) Java的默认复制规则是浅层复制, 性能好, 隔离性差,浅层复制现象, 只复制第一层对象

2) 利用序列化实现深层复制

 

  • 大小: 63.2 KB
0
1
分享到:
评论

相关推荐

    JAVA IO流技术

    Java IO流技术是Java平台中用于处理输入输出的重要机制,其核心在于数据的传输,从数据源到程序或从程序到目的地。在Java中,流分为两大类:输入流(InputStream、Reader)和输出流(OutputStream、Writer)。输入流...

    IO流 javaio java 流

    Java中的IO流是Java核心库的重要组成部分,它用于在不同数据源之间传输数据。Java IO流分为两大类:字符流(Character Stream)和字节流(Byte Stream)。字符流处理单个字符,而字节流处理8位的字节序列。它们又...

    java_io 流介绍

    ### Java IO 流介绍 #### 一、Java IO 流概述 Java IO(Input/Output)流是Java中用于处理输入输出操作的核心组件之一。它主要用于处理数据的读写操作,包括从文件、网络等来源读取数据以及将数据写入文件、网络等...

    java io流 案例

    Java IO流是Java平台中的重要组成部分,用于处理输入和输出操作。它允许程序与外部设备如硬盘、网络、内存等进行数据传输。IO流的概念基于流(Stream)模型,数据以字节或字符序列的形式流动。Java IO库提供了丰富的...

    java IO流详细笔记

    Java IO流详解

    Java IO流文档

    ### Java IO流详解 #### 一、Input和Output Stream概览 在Java中,输入输出流(简称IO流)是用来处理文件读写的核心技术之一。它主要包括两类:以字节为导向的流和以字符为导向的流。 ##### 1.1 以字节为导向的流...

    Java IO流 总结

    Java IO流总结 Java IO流是Java语言中最基本和最重要的输入/输出机制,负责将数据从外部世界输入到Java应用程序中或将数据从Java应用程序输出到外部世界。IO流可以分为两大类:字节流和字符流。 1. 节点流:离数据...

    Java io流总结

    Java io流的总结

    JAVA IO流缓冲字节流缓冲字符流等流经典代码示例加注释总结.rar

    2、常用21个IO流:FileWriter、FileReader、...3、JAVA IO流经典代码示例,示例从易到难。代码功能涉及字节、字符、字符串、文本文件、图片、音频、视频。演示错误用法和经典用法。 4、代码的结构可查看README文件。

    JavaIO流详细总结

    Java IO流是Java编程语言中处理输入和输出的重要机制,它允许程序与各种类型的输入源(如键盘、文件、网络连接)以及输出目标(如显示器、文件、网络)进行交互。在Java中,I/O流被设计为面向对象,使得处理数据变得...

    Java IO流.ppt

    这是一份关于android开发的相关资料,供初学者学习使用。

    java io流源代码

    Java IO流是Java平台中用于处理输入输出操作的核心部分,它允许程序与各种数据源(如文件、设备、网络)进行交互。IO流在Java中分为两大类:字节流和字符流,每种流又有输入流和输出流之分。字节流处理的是8位的字节...

    java IO流精讲 JAVA IO流实例开发

    Java IO流是Java平台中用于处理输入/输出操作的核心组件,它允许程序与各种数据源(如文件、网络连接、内存缓冲区等)进行交互。Java IO流的精讲涵盖了许多概念和技术,包括流的分类、流的方向、缓冲区的使用、字符...

    java IO流+socket源码 实现简单文本传输

    Java IO流和Socket是Java编程语言中用于处理输入输出和网络通信的重要概念。在这个示例中,我们将深入探讨如何利用Java IO流与Socket实现简单的文本传输。对于初学者来说,理解这两个概念及其交互是非常关键的。 ...

    java io流PPT课件.pptx

    Java IO流是Java编程语言中用于处理输入输出操作的核心组件,尤其在文件操作、设备交互以及数据传输方面扮演着重要角色。在Java中,IO流的概念首次被引入是为了方便数据在不同源和目的地之间流动,它将各种I/O操作...

    Java-Io流,练习

    Java的IO流是Java编程语言中的重要组成部分,它主要用于数据的输入和输出操作。在Java中,IO流被设计为处理任何类型的数据,包括字符、字节甚至对象。本练习旨在帮助初学者理解和掌握Java IO流的基础知识。 一、IO...

    Java中文件IO流.pdf

    Java 中文件 IO 流 Java 中文件 IO 流是指 Java 语言中对文件的输入输出操作,通过定义文件流来实现文件的读写操作。文件流是指在程序中用于文件输入输出的对象, Java 中提供了多种文件流类型,包括 InputStream ...

    javaIO流知识大总结

    在这个大总结中,我们将深入探讨Java IO流的基本概念、分类、常用类以及实践应用。 1. **基本概念** - **流(Stream)**:在Java中,流是一个抽象的概念,代表数据的有序序列。它可以是字节流或字符流,流向可以是...

    javaIO流原代码

    javaIO流原代码,刚刚开始学习java的同志们可以看看.有问题留言.

    java零基础自学 之 JavaIO流处理

    Java IO流处理是Java编程中一个非常重要的概念,主要用于数据的输入和输出操作。对于Java初学者来说,理解和掌握IO流的基本使用至关重要。在Java中,流被形象地比喻为数据传输的通道,数据可以从一个源头(如文件、...

Global site tag (gtag.js) - Google Analytics