1、JAVA中的IO流分字节流和字符流
2、InputStream/OutputStream是字节流的接口
3、Reader/Writer是字符流的接口
4、字节流InputStream/OutputStream的子类
a)BufferedInputStream/BufferedOutputStream以InputStream/OutputStream对象做为参数构造一个流缓冲区
b)ByteArrayInputStream/ByteArrayOutputStream以byte[]作为构造参数构造一个缓冲区,
该缓冲区会随着数据的不断写入而自动增长,可以使用toByteArray()和toString()获取数据。
用法:
1)获取所有数据
InputStream in=new FileInputStream("c:/1.txt");
BufferedInputStream buffIn=new BufferedInputStream(in);
ByteArrayOutputStream byteOut=new ByteArrayOutputStream();
int b;
while((b=buffIn.read())!=-1){
byteOut.write(b);//byteOut会随着写入的增长而增长
}
buffIn.close();
byte[] arr=byteOut.toByteArray();
2)不用ByteArrayOutputStream完成同样的事
InputStream in=new FileInputStream("c:/1.txt");
byte[] b=new byte[in.available()];//创建一个该文件长度的byte数组,不过对于比较大的文件该方法不可取。
in.read(b);//一次性读取出来
c)FileInputStream/FileOutputStream文件输入输出流
d)ObjectOutputStream/ObjectInputStream对象序列化
public static void main(String[] args) throws IOException, ClassNotFoundException {
String filename="c:"+File.separator+"map.obj";
Map map=new HashMap();
putData(map);
FileOutputStream out=new FileOutputStream(filename);
ObjectOutputStream objout=new ObjectOutputStream(out);
objout.writeObject(map);
objout.close();
out.close();
System.out.println("读");
FileInputStream in=new FileInputStream(filename);
ObjectInputStream objin=new ObjectInputStream(in);
Map readmap = (Map) objin.readObject();
System.out.println(readmap);
System.out.println(readmap.size());
}
public static void putData(Map map){
for (int i = 0; i < 20; i++) {
map.put("a"+i, "aa"+i);
}
}
5、字符流Reader/Writer的子类
a)FileReader/FileWriter文件操作类
b)管道流PipedReader/PipedWriter
/**
* 管道流PipedWriter/PipedReader是一种特殊的流,用于在不同的线程之间传递数据。
* 一个线程发送数据到输出管道,另一个线程从输出管道中读数据,通过使用管道实现不同线程间的通信。
* PipedWriter:写入数据到管道中
* PipedReader:从管道中读取数据
*
* writer.connect(reader)/reader.connect(writer)都证明了读写管道的联通,2种写法都没错.
*
* 过程:
* 1、声明读写管道对象
* 2、读连接写/写连接读
* 3、写管道将数据写到写管道对象中,写管道可以关闭。
* 4、读管道可以从管道中读取数据
* 注意PipedWriter/PipedReader的构造函数。
* 其实管道流就如同一个缓冲区,所以当放置到管道流中的字符过于大的话,也就是装满了的话管道的writer方法会阻塞。
*/
PipedWriter writer = new PipedWriter();
PipedReader reader = new PipedReader();
//writer.connect(reader);
reader.connect(writer);//
System.out.println("reader:" + reader.ready());
String str = "abcdefg";
for (int i = 0; i < str.length(); i++) {
writer.write(str.charAt(i));
}
writer.flush();//
writer.close();
System.out.println("reader:" + reader.ready());
int ch;
while ((ch = reader.read()) != -1) {
System.out.println(ch);
}
reader.close();
6、
7、字节流和字符流的区别
字节流在操作的时候是直接与文件本身关联的,不使用缓冲区,字节流----文件
字符流在操作的时候是通过缓冲区与文件关联的,字符流---缓冲区---文件
保存在硬盘上的文件的内容都是以字节的形式存在的,所以字节流操作比较多,
但是在操作中文的时候字符流比较好用。
java的
8、关于字节流出现乱码的问题
因为字节流获取的是二进制数据,也就是byte,英文:1个byte=1个字符,中文:2个byte=1个字符。
所以出现乱码。java内部的转换方式是依靠String类来转换的
1、new String(byte[],0,len)
new String(char[],0,len)
2、StringCoding.decode(b, 0, n);
3、decode方法首先用当前平台的默认encoding转换,然后用ISO-8859-1转换,出错就退出。
想法:当我们用字节流读取文件内容的时候,得到的是字节码,这个时候可以用String将字节码转换成字符就不是乱码了。
分享到:
相关推荐
以下是对Java IO的详细学习总结: ### 1. IO流概述 IO流是Java中处理输入输出的核心概念。它们可以被视为数据传输的管道,允许数据在源和目的地之间流动。Java将所有IO操作封装为流对象,分为四大类:字节流(Byte ...
JAVA_IO流学习总结
总结来说,Java IO流是一个庞大的体系,覆盖了从基础的文件操作到复杂的网络通信,理解并熟练掌握这一部分将极大地提升Java开发者的技能。通过学习和实践,开发者可以灵活地处理各种数据输入输出场景,为应用程序...
这是别人总结的很有实用价值的javaIO流教程。
**java.io** 将字符串形式的路径,封装成File类,File类提供了大量的直接操作文件和文件夹的方法。 二.File的静态常量 static String pathseparator 与系统有关的路径分隔符 返回“;”——–路径和路径用“;...
【Java IO 学习总结】 Java IO 是 Java 平台中用于处理输入和输出的核心库,它提供了丰富的类和接口,使得程序能够与各种设备、文件系统以及网络进行交互。IO 操作通常涉及数据的传输,Java 中所有的数据传输都是...
Java IO流是Java平台中处理输入输出操作的核心组件,它允许程序与各种数据源(如文件、设备、网络连接)进行交互。IO流系统由多个类和接口组成,它们位于java.io包中,为开发者提供了读写数据的丰富功能。在Java中,...
这篇博客“Java学习之IO总结及mina和netty”探讨了Java IO的基础知识,并深入到两个高级网络通信框架——Mina和Netty。Mina和Netty都是基于NIO(非阻塞IO)的高性能网络应用框架,它们简化了复杂网络编程的实现。 *...
javaio流学习总结.pdf
《Java IO.chm》是一个关于Java输入/输出(IO)技术的压缩文件,其中包含了丰富的资料,适合开发者深入理解和学习Java IO系统。这篇详细的总结将围绕Java IO体系结构、核心类、流的概念、缓冲区、转换流、字符集、...
### Java IO操作总结 Java IO(输入/输出)是Java编程语言中用于处理数据输入和输出的核心机制。本文档全面总结了Java IO的各种操作,旨在为开发者提供一个深入理解并熟练掌握Java IO技术的资源。 #### 一、临时...
### Java IO学习基础之读写文本文件 #### 一、Java IO概述 Java IO(Input/Output)是Java中处理输入输出操作的核心包,它主要提供了文件读写、网络通信等基本功能。Java IO操作主要基于流的概念进行,分为字节流...
这篇文章将对"Java IO"进行深入的总结,涵盖其核心概念、类库和实用技巧。 Java IO系统是Java平台中用于处理输入输出的重要部分,它包括一系列的类和接口,使得程序能够读取和写入各种数据流。Java IO API的设计...
Java IO学习笔记中提到,流的操作非常容易,Java API中提供了丰富的流处理类,API也大差不差,看看文档即可上手。 在Java IO中,流的分类非常丰富,包括输入流、输出流、字节流、字符流、节点流、处理流等等。掌握...
虽然本报告主要讨论了基础的IO流,但了解NIO也是Java IO学习的重要部分。 总之,Java IO流是处理输入输出的核心工具,理解字节流与字符流的区别、流的层次结构以及基本操作方法,对于进行文件读写、网络通信等任务...
本篇总结主要围绕Java IO流的基础概念、分类以及常用方法展开。 首先,Java IO流按照数据流动的方向可分为输入流(Input Stream)和输出流(Output Stream)。输入流负责从源(如文件、网络连接)读取数据,而输出...
io流的学习总结,流的介绍 流的分类: 1.方向分类: 输入流(读取): 输出流(写入): 2.最小单位: 字节流(二进制数据): 字符流(字符数据,纯文本):