前言:

java中IO里的一些知识对于一个java新手来说,是比较难理解的。因为里面存在一些很绕的概念,比如:

1.到底是读入写出,还是读出写入;

2.我要将一个文件的内容拷贝到另一个文件是先用InputStream还是OutputStream;

3.什么时候用FileInputStream,什么时候用ByteArrayInputStream,什么时候又用StreamBufferInputStream;

要印象深刻的解决这些问题,还是那句话,得从理解出发。

正题:

对于IO的基础知识模型,分类,及各个类的特性相信有很多的帖子说的很详细了,本文就不再赘述了。

首先我们阐述一个聊天的概念,举个例子,假如你现在在跟小明聊天,小明在给你倾述他失恋了有多么多么难受,是不是他心里有一堆话然后通过嘴巴表达出来。然后你在认真的聆听并且感受他的难受,是不是通过耳朵接收然后放到心里去感受。

好了,我们把这个场景放到程序里面如下图:

(请先放弃你们的审美,这样你才能认出耳朵和嘴巴)

这里有四个节点,每个节点都有自己的职责,首先如果小明的嘴巴要表达他心里的难受需要去读取心里的内容,我们知道读取我们都用read()方法。InputStream才有read()方法,所以这时我们肯定是用InputStream。当你的耳朵接收到小明表达的内容后,需要写到你的心里去,这是我们要用到write()方法,可想而知是用OutputStream。

到这里我们回到上面的问题,其实是一个读出写入的过程,然后我们把两个心看成两个file,那么要把小明的内容copy到你的心里就分以下步骤:

1.创建小明心的FileInputStream,然后调用它的read()方法,把读到的内容放到Byte[]中。

2.创建你心的FileOutputStream,然后调用write()方法,把上一步Byte[]中的内容写到你心里去。

以下测试场景可以对照测试:

创建两个文件xiaoming's-heart.txt和your-heart.txt并且在xiaoming's-heart.txt中输入内容

然后执行以下码

public static void main(String[] args){
File xiaomingFile = new File("E:/testFile/xiaoming's-heart.txt");
File yourFile = new File("E:/testFile/your-heart.txt");
try {
InputStream is = new FileInputStream(xiaomingFile);
OutputStream os = new FileOutputStream(yourFile);
byte[] buffer = new byte[4096];
int readLen = 0;
while ((readLen = is.read(buffer, 0, 4096)) >= 0) {
System.out.print((char)readLen);
os.write(buffer, 0, readLen);
os.flush();
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}

结果

我们可以看到,xiaoming's-heart.txt文件中的内容已经copy到your-heart.txt,这是一个很简单的例子,知识方便大家理解上面的理论场景

至于什么时候该用什么流其实只需要根据不同源和目的地选择即可。

总结:

本文只是帮助一些深陷其中的朋友简单理解一下java的io操作,希望简单的场景能让大家有一个清晰的理解。涉及的内容很少。其他io相关知识可以通过其他网络资料获取。

java IO操作,看完你应该就清晰了。的更多相关文章

  1. Java基础?看完以后再也不惧怕面试了

    前言 这篇文章主要是Java基础部分,主要分为3个部分:Java集合.Java多线.JVM:这些东西帮助我面试成功率提升了很多.后面还有中间件Spring.Redis.RocketMQ等等吧,祝愿大家 ...

  2. JAVA—IO操作

    一.JAVA I/O 输入输出流 1:编码问题 2:File类的使用 3:RandomAccessFile的使用 4:字节流的使用 5:字符流的使用 6:对象的序列化和反序列化 2: file类的使用 ...

  3. java IO操作:FileInputStream,FileOutputStream,FileReader,FileWriter实例

    FileInputStream <span style="font-family:Verdana;">import java.io.File; import java. ...

  4. Java IO操作——数据操作流DataOutputStream和DataInputStream的使用

    学习目标  掌握DataOutputStream和DataInputStream的作用 可以使用DataOutputStream和DataInputStream写入和读入数据 数据操作流 在io包中, ...

  5. Java IO操作:合并流

    合并流:把两个文件合并在一起. 主要操作的是内容. 定义: public class SequenceInputStreamextends InputStream 方法摘要: 操作步骤: 1,分别建立 ...

  6. JAVA IO操作:数据操作流:DataOutputStream和DataInputStream

    掌握DataOutputStream和DataInputStream的作用. 可以使用DataOutputStream和DataInputStream写入和读取数据. 在IO包中提供了两个与平台无关的 ...

  7. java IO操作和计算操作:工作内存和主内存 volatile关键字作用;原子操作对象AtomicInteger ....

    应该停止但无法停止的计算线程 如下线程示例,线程实例中while循环中的条件,在主线程中通过调用实例方法更新后,while循环并没有更新判断变量是否还成立.而是陷入了while(true)死循环. i ...

  8. Java IO操作

    转自:http://www.cnblogs.com/jyan/articles/2505791.html Johnny Yan的博客 1 InputStream类型 InputStream的作用是标志 ...

  9. 每天进步一点点-Java IO操作-Java Serializable(对象序列化)的理解和总结

    往硬盘文件里写数据 序列化:序列化是将对象转换为容易传输的格式的过程.例如,可以序列化一个对象,然后使用 HTTP 通过 Internet 在客户端和服务器之间传输该对象.在另一端,反序列化将从该流重 ...

随机推荐

  1. linux c语言学习笔记之守护进程

    哈尔滨理工大学软件工程专业08-7李万鹏原创作品,转载请标明出处 http://blog.csdn.net/woshixingaaa/archive/2010/06/06/5651095.aspx 守 ...

  2. windows中抓取hash小结(下)

    书接上回,windows中抓取hash小结(上) 指路链接 https://www.cnblogs.com/lcxblogs/p/13957899.html 继续 0x03 从ntds.dit中抓取 ...

  3. VLAN-5 利用三层交换机实现vlan间的路由

    一.实验拓扑图 二.实验编址 三.实验步骤 1.给对应的PC设置对应的IP和掩码还有接口,以及根据需要划分不同的vlan区域,再用文本标记出不同部门. 2.启动设备(全选) 3.首先用ping命令检查 ...

  4. 51单片机—LCD1602显示模块

    文章目录 - 什么是LCD1602 - 如何操作LCD1602 - 上代码 - 什么是LCD1602 LCD:Liquid Crystal Display-液晶显示器,简称LCD,其主要显示原理是以电 ...

  5. Do you want to continue? [Y/n] Abort.

    当出现这个后命令终止,无法选择 y这时候 ,在输入命令时候提前加入 -y udo apt install sysv-rc-conf -y

  6. 深层剖析鸿蒙轻内核M核的动态内存如何支持多段非连续性内存

    摘要:鸿蒙轻内核M核新增支持了多段非连续性内存区域,把多个非连续性内存逻辑上合一,用户不感知底层的不同内存块. 本文分享自华为云社区<鸿蒙轻内核M核源码分析系列九 动态内存Dynamic Mem ...

  7. HttpURLConnection 中Cookie 使用

    方式一: 如果想通过 HttpURLConnection 访问网站,网站返回cookie信息,下次再通过HttpURLConnection访问时,把网站返回 cookie信息再返回给该网站.可以使用下 ...

  8. springmvc学习日志三

    一.文件的上传 1.首先在lib中添加相应的jar包 2.建立jsp页面,表单必须是post提交,编码必须是multipart/form-data,文件上传文本框必须起名 <body> & ...

  9. mfc HackerTools防止程序双开

    来自:https://github.com/TonyChen56/HackerTools 1 HANDLE hMutex = CreateMutexA(NULL, FALSE, "GuiSh ...

  10. 【转】分布式之redis复习精讲

    转自:https://www.cnblogs.com/rjzheng/p/9096228.html 引言 为什么写这篇文章? 博主的<分布式之消息队列复习精讲>得到了大家的好评,内心诚惶诚 ...