一、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) 利用序列化实现深层复制
相关推荐
Java IO流技术是Java平台中用于处理输入输出的重要机制,其核心在于数据的传输,从数据源到程序或从程序到目的地。在Java中,流分为两大类:输入流(InputStream、Reader)和输出流(OutputStream、Writer)。输入流...
Java中的IO流是Java核心库的重要组成部分,它用于在不同数据源之间传输数据。Java IO流分为两大类:字符流(Character Stream)和字节流(Byte Stream)。字符流处理单个字符,而字节流处理8位的字节序列。它们又...
### Java IO 流介绍 #### 一、Java IO 流概述 Java IO(Input/Output)流是Java中用于处理输入输出操作的核心组件之一。它主要用于处理数据的读写操作,包括从文件、网络等来源读取数据以及将数据写入文件、网络等...
Java IO流是Java平台中的重要组成部分,用于处理输入和输出操作。它允许程序与外部设备如硬盘、网络、内存等进行数据传输。IO流的概念基于流(Stream)模型,数据以字节或字符序列的形式流动。Java IO库提供了丰富的...
Java IO流详解
### Java IO流详解 #### 一、Input和Output Stream概览 在Java中,输入输出流(简称IO流)是用来处理文件读写的核心技术之一。它主要包括两类:以字节为导向的流和以字符为导向的流。 ##### 1.1 以字节为导向的流...
Java IO流总结 Java IO流是Java语言中最基本和最重要的输入/输出机制,负责将数据从外部世界输入到Java应用程序中或将数据从Java应用程序输出到外部世界。IO流可以分为两大类:字节流和字符流。 1. 节点流:离数据...
Java io流的总结
2、常用21个IO流:FileWriter、FileReader、...3、JAVA IO流经典代码示例,示例从易到难。代码功能涉及字节、字符、字符串、文本文件、图片、音频、视频。演示错误用法和经典用法。 4、代码的结构可查看README文件。
Java IO流是Java编程语言中处理输入和输出的重要机制,它允许程序与各种类型的输入源(如键盘、文件、网络连接)以及输出目标(如显示器、文件、网络)进行交互。在Java中,I/O流被设计为面向对象,使得处理数据变得...
这是一份关于android开发的相关资料,供初学者学习使用。
Java IO流是Java平台中用于处理输入输出操作的核心部分,它允许程序与各种数据源(如文件、设备、网络)进行交互。IO流在Java中分为两大类:字节流和字符流,每种流又有输入流和输出流之分。字节流处理的是8位的字节...
Java IO流是Java平台中用于处理输入/输出操作的核心组件,它允许程序与各种数据源(如文件、网络连接、内存缓冲区等)进行交互。Java IO流的精讲涵盖了许多概念和技术,包括流的分类、流的方向、缓冲区的使用、字符...
Java IO流和Socket是Java编程语言中用于处理输入输出和网络通信的重要概念。在这个示例中,我们将深入探讨如何利用Java IO流与Socket实现简单的文本传输。对于初学者来说,理解这两个概念及其交互是非常关键的。 ...
Java IO流是Java编程语言中用于处理输入输出操作的核心组件,尤其在文件操作、设备交互以及数据传输方面扮演着重要角色。在Java中,IO流的概念首次被引入是为了方便数据在不同源和目的地之间流动,它将各种I/O操作...
Java的IO流是Java编程语言中的重要组成部分,它主要用于数据的输入和输出操作。在Java中,IO流被设计为处理任何类型的数据,包括字符、字节甚至对象。本练习旨在帮助初学者理解和掌握Java IO流的基础知识。 一、IO...
Java 中文件 IO 流 Java 中文件 IO 流是指 Java 语言中对文件的输入输出操作,通过定义文件流来实现文件的读写操作。文件流是指在程序中用于文件输入输出的对象, Java 中提供了多种文件流类型,包括 InputStream ...
在这个大总结中,我们将深入探讨Java IO流的基本概念、分类、常用类以及实践应用。 1. **基本概念** - **流(Stream)**:在Java中,流是一个抽象的概念,代表数据的有序序列。它可以是字节流或字符流,流向可以是...
javaIO流原代码,刚刚开始学习java的同志们可以看看.有问题留言.
Java IO流处理是Java编程中一个非常重要的概念,主要用于数据的输入和输出操作。对于Java初学者来说,理解和掌握IO流的基本使用至关重要。在Java中,流被形象地比喻为数据传输的通道,数据可以从一个源头(如文件、...