对于JAVA的IO系统,从开始学习JAVA开始到现在,一直都晕的很
后来工作了也没有用到,到了再后来,能看懂IO的程序!但是自己去写就麻烦了,一点都没有头绪
很多东西都搞不清除!这个假期决定要一步步的攻克自己的弊端! 呵呵
今天晚上从IO开始! 变学习变写这篇文章!希望能在文章结束的时候能搞定IO!
首先: “流”的理解
在JAVA中,一组有序的数据序列称为“流”
流分为输入流和输出流两种!
JAVA的IO系统负责的就是程序的输入和输出! 好好看看java.io包!虽然这个包很复杂。 头晕!
IO流: 1: 字节流 java.io.InputStream / java.io.OutputStream
2:字符流 java.io.Reader / java.io.Writer
疑问: 搞不懂他们,如果简单的认为字节流是数据流中最小的数据单元是字节,字符流中最小的数据单元是字符,做开发的时候就像我一样,头晕。
字节流是最基本的! 字节流主要是用在二进制数据
字符流是基础与字节流之上!处理UNICODE数据
有个问题就是 JAVA开发中所有的中文问题都是由字节流转换成字符流的时候发生的!
记得在一篇文章上看到过一个写关于字节流和字符流相关的东西!
叫做“搬苹果”, 现在有一对苹果,你怎么搬呢,用字节流是一个一个搬,字符流是做一个箱子然后把苹果装进箱子然后再搬! 大概意思就是这个样子了,所以听了感觉就是,字符流是字节流的包装体了,事实上就是这个样子的。但这样说的话,好像是感觉字符流的效率要好过字节流了,不是这个样子的,这个故事就是说明白了字节流是和字符流的运作过程!后来和同事谈起来这个事情,他说的很好,他说字节流效率好!没有了。后来又一位同事说:1:字节流速度快 2:字符流是通过字节流转换的 所以这个故事和最后的答案都出来了!
这就是我对上面这个问题:字节流和字符流的区别的理解。
在网上找了很多IO的示例程序! 采用的IO的类或者接口可是说是让人头晕的很,所以不学习下IO的常用类或者接口是不行的啊 呵呵
从字节流开始:
InputStream :抽象类,是所有字节输入流的超类
子类: ByteArrayInputStream: 把字节数组转换为输入流,把内存中的一个缓冲区作为InputStream 使用
FileInputStream : 从文件中读取数据,把一个文件作为InputStream,实现对文件的读取操作
PipedInputStream : 连接一个PipedInputStream,实现了pipe的概念,主要在线程中使用
SequenceInputStream : 把几个输入流转换为一个输入流,把多个InputStream合并为一个InputStream
ObjectInputStream :对象输入流
FilterInputStream :装饰器,具有扩展其他输入流的功能
OutputStream:抽象类,是所有字节输出流的超类
子类: ByteArrayOutputStream : 向字节数组(内存的缓冲区)中写数据,把信息存入内存中的一个缓冲区中
FileOutputStream :向文件中写数据,把信息存入文件中
PipedInputStream :向管道中输出数据,与PipedInputStream搭配使用,实现了pipe的概念,主要在线程中使用
ObjectOutputStream :对象输出流
FilterOutputStream :装饰器,扩展其他输出流的功能
字节输入流和输出流的所有类都在这里总结,大概意思就是这样!慢慢加深理解。
字符流: (处理字符流最大的问题是进行字符编码的转换)
Reader : 读取字符流的抽象类
子类:
CharArrayReader : 适配器,把字符数组转换为Reader,从字符数组中读取字符,与ByteArrayInputStream对应
BufferedReader : 装饰器,为其他的Reader提供缓冲区。
LineNumberReader:装饰器,为其他的Reader提供缓冲区,并且可以跟踪字符输入流中的行号
StringReader : 适配器,把字符串转换为Reader,从字符串中读取字符
PipedReader :连接一个PipedWriter
FilterReader : 装饰器,扩展其他的Reader的功能
InputStreamReader : 适配器,把InputStream转换为Reader,可以指定数据源的字符编码
FileReader : 从文件中读取字符
Writer : 写入字符流的抽象类
子类:
CharArrayWriter : 适配器,把字符数组转换为Witer,向字符数组中写字符
BufferedWriter ; 装饰器,为其他的Writer提供写缓冲区
StringWriter :适配器,把StringBuffer转换为Writer,向StringBuffer中写字符
PipedWriter :连接一个PipedReader
FilterWriter :装饰器,扩展其他的Writer的功能
PringWriter :装配器,输出格式化数据
OutputStreamWriter : 适配器,把OutputStream 转换Writer ,可以指定数据汇的字符编码
FileWriter : 向文件中写字符
File 类
File类提供了管理文件或目录的方法。File实例表示真实文件系统中的一个文件或者目录。
简单程序例子: 这里是一个BufferedReader的例子,BufferedReader为其他的Reader提供了缓冲区,效率高
定义两个文件,从文件1中读取字符数据,然后写入文件2中去。
public class demo {
public static void main(String[] args) throws IOException{
File read=new File("F:\\1.txt");
File write=new File("F:\\2.txt");
try {
BufferedReader br=new BufferedReader(new FileReader(read));
BufferedWriter bw=new BufferedWriter(new FileWriter(write));
String temp=null;
temp=br.readLine();
while(temp!=null){
//写文件
bw.write(temp);
temp=br.readLine();
}
bw.close();
br.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
}
}
}
分享到:
- 2007-05-13 17:34
- 浏览 3681
- 评论(3)
- 论坛回复 / 浏览 (3 / 6702)
- 查看更多
相关推荐
通过这个思维导图,学习者可以按照自己的进度和兴趣逐个攻克Java的各个知识点,从基础到高级,从理论到实践,逐步建立完整的知识体系。对于初学者,它能帮助快速入门;对于有经验的开发者,它能作为一个很好的复习和...
Java编程是一种广泛使用的...通过这10道精选的JAVA小题,我们可以逐一攻克Java编程的基石,加深对语言特性的理解,并逐步提高编程能力。实践中遇到的问题和解决方案将成为宝贵的经验,为日后的项目开发打下坚实基础。
6. **输入/输出流**:JAVA的IO流系统支持文件读写、网络通信等,包括FileInputStream、FileOutputStream、BufferedReader、PrintWriter等类的使用。 7. **多线程**:JAVA提供了Thread类和Runnable接口实现多线程,...
7. 输入输出(IO流):学习如何使用Java的IO库进行文件操作,如读写文件、数据传输等。 8. 集合框架:ArrayList、LinkedList、HashMap等集合类是Java程序中常见的数据结构,用于存储和管理对象。 9. 多线程:Java...
9. **Java新特性**:随着Java版本的更新,新的特性和API不断引入,如Java 8的Lambda表达式、Stream API,Java 11的模块系统等,了解并能合理运用新特性是体现技术与时俱进的关键。 10. **项目经验与问题解决**:...
通过这些实例,开发者可以逐一攻克Java编程中的各种挑战,理解其背后的逻辑和原理。同时,不断地练习和应用这些实例,将有助于培养良好的编程习惯,提高问题解决能力。在实践中遇到的问题,也会促进对Java文档和在线...
这个压缩包很可能包含了多个文档或者PDF文件,每个文件可能对应一个或多个主题,如Java基础、多线程、集合框架、IO/NIO、网络编程、设计模式、JVM优化、数据库操作、Spring框架及其他企业级应用的相关知识。...
10. **IO流**:理解Java的输入/输出系统,包括字节流、字符流、缓冲流、对象序列化等。 11. **集合框架**:深入理解List、Set、Map接口及其实现类,如ArrayList、LinkedList、HashSet、HashMap等的特性与使用。 12...
决赛阶段的题目往往更具挑战性,可能会涵盖IO流、多线程、反射、枚举、注解、设计模式(如单例模式、工厂模式、观察者模式等)等内容。此外,还可能涉及Java的高级特性,如Lambda表达式、Stream API以及Java 8及以后...
《Java编程大师课程实践解析》 Java,作为全球最广泛使用的编程语言之一,以其平台无关性、...通过逐个攻克这些挑战,你不仅可以巩固理论知识,还能增强解决实际问题的能力,为成为一名Java编程大师打下坚实的基础。
5. **IO流**: 输入输出(IO)流是Java中处理数据输入和输出的关键部分,涵盖了文件读写、网络通信等。了解和运用InputStream、OutputStream、Reader、Writer等类,能增强你的文件操作能力。 6. **多线程**: Java...
"Assignments-main"这个文件名可能暗示了这是一个包含多个Java作业的主目录,每个作业可能对应一个具体的编程任务或挑战,逐一攻克它们将巩固你的Java编程能力。在实践中不断学习和成长,是成为一名优秀Java程序员的...
在IT行业中,"实践性疾病"通常指的是由于缺乏实际操作经验而导致的问题。...文件"PracticasClase-master"可能包含一系列的练习或项目,这些都是提升Java实践能力的绝佳资源,应充分利用并逐一攻克。
8. **IO/NIO**:了解文件操作和网络通信,是进行系统级编程的基础。 9. **反射与注解**:这些高级特性可以增强程序的灵活性和自省能力。 10. **JVM原理**:理解内存管理、垃圾回收、类加载机制,有助于优化程序...
2. **Java编程基础**:Java是Android开发的主要语言,掌握其面向对象特性、异常处理、集合框架(List、Set、Map)、多线程(Thread、Runnable、ExecutorService)以及IO流等是基础。此外,了解Java内存模型、垃圾...