百战程序员9- IO流
1、IO是什么意思? data source是什么意思?
IO:输入输出
data source:数据源
2、字节流和字符流有什么区别?输入流和输出流有什么区别?
3、节点流和处理流有什么区别?
按照流是否直接与特定的地方(如磁盘、内存、设备等)相连,分为节点流和处理流两类。
节点流:可以从或向一个特定的地方(节点)读写数据。如FileReader.
处理流:是对一个已存在的流的连接和封装,通过所封装的流的功能调用实现数据读写。如BufferedReader.处理流的构造方法总是要带一个其他的流对象做参数。一个流对象经过其他流的多次包装,称为流的链接。
JAVA常用的节点流有以下几个:
文 件 FileInputStream FileOutputStrean FileReader FileWriter 文件进行处理的节点流。
字符串 StringReader StringWriter 对字符串进行处理的节点流。
数 组 ByteArrayInputStream ByteArrayOutputStreamCharArrayReader CharArrayWriter 对数组进行处理的节点流(对应的不再是文件,而是内存中的一个数组)。
管 道 PipedInputStream PipedOutputStream PipedReaderPipedWriter对管道进行处理的节点流。
父 类 InputStream OutputStream Reader Writer
常用处理流(关闭处理流使用关闭里面的节点流)
缓冲流:BufferedInputStrean BufferedOutputStream BufferedReader BufferedWriter
增加缓冲功能,避免频繁读写硬盘。
转换流:InputStreamReader OutputStreamReader实现字节流和字符流之间的转换。
数据流 DataInputStream DataOutputStream 等-提供将基础数据类型写入到文件中,或者读取出来。
4、word文档能使用字符流操作吗?为什么?
不能,纯文本才可以用字符流
5、【上机】完成老师课堂上读入文件数据的代码:
static void testReader(){ File f = new File("d:/a.txt"); FileInputStream fis = null; try { fis = new FileInputStream(f); int m = 0; while((m=fis.read())!=-1){ char c = (char) m; System.out.print(c); } } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); }finally{ try { if(fis!=null){ fis.close(); } } catch (IOException e) { e.printStackTrace(); } } } |
6、解释下面代码的含义:
while((m=fis.read())!=-1){ char c = (char) m; System.out.print(c); } |
没有读完就一直读
7、流对象使用完后,一般要调用close方法关闭,释放资源。 这种做法对吗?
虽然在字节流当中,操作没有用到缓冲区,所以使用完流之后不写close方法也可以,但是为了规范,最好也要写上。字符流当中,必须使用close方法,否则内容无法输入输出。
8、【上机】完成老师写文件的操作:
static void testWrite(){ FileOutputStream fos = null; String str = "sffsdfsdfsdfsdfsdfsdfsdf"; try { fos = new FileOutputStream("d:/b.txt"); /*for(int i=0;i<str.length();i++){ fos.write(str.charAt(i)); }*/ fos.write(str.getBytes()); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); }finally{ try { if(fos!=null){ fos.close(); } } catch (IOException e) { e.printStackTrace(); } } } |
9、InputStream和OutputStream基本特点是?
参见“这里”
10、Reader和Writer的基本特点是?
参考“Reader和Writer”
11、FileInputStream和OutputStream的基本作用是?
操作文件的字节流就是 FileInputStream & FileOutputStream
12、FileReader和FileWriter的作用是?
操作文件的字符流就是 FileInputStream & FileOutputStream
FileInputStream(字节流)与fileReader(字符流) 的区别
边读变写即可
14、BufferInputStream和BufferedOutputStream的特点是?
参考:BufferedInputStream与BufferedOutputStream用法简介
15、【上机】使用BufferedReader和BufferedWriter实现文本文件的拷贝。
public static void testReader() throws Exception{ // 创建读取对象reader Reader reader = new FileReader(new File("c:/a.txt"")); // 创建缓冲流包装reader BufferedReader br = new BufferedReader(reader); // 创建写入对象writer Writer writer = new FileWriter(new File("e:/a.txt")); // 创建缓冲流包装writer BufferedWriter bw = new BufferedWriter(writer); String str = null; // 用循环边读边写 while((str = br.readLine())!=null){ bw.writer(str); bw.newLine(); } bw.flush(); bw.close(); br.close(); }
16、PrintStream打印流经常用于什么情况? System.out 是不是打印流?
参考:这里
17、【上机】实现字节数组和任何基本类型和引用类型执行的相互转换
提示:使用ByteArrayInutStream和ByteArrayOutputStream。
(1) 字节数组和基本数据类型之间的转换
boolean flag = true; ByteArrayOutputStream baos = new ByteArrayOutputStream(); DataOutputStream dos = new DataOutputStream(baos); dos.writeBoolean(flag); byte[] b = baos.toByteArray(); byte[] b = new byte[1024]; ByteArrayInputStream bais = new ByteArrayInputStream(b); DataInputStream dis = new DataInputStream(bais); boolean flag = dis.readBoolean();
(2) 字节数组和引用类型之间的转换
User user = new User(); ByteArrayOutputStream baos = new ByteArrayOutputStream(); ObjectOutputStream oos = new ObjectOutputStream(baos); oos.writeObject(user); byte[] b = baos.toByteArray(); byte[] b = new byte[1024]; ByteArrayInputStream bais = new ByteArrayInputStream(b); ObjectInputStream ois = new ObjectInputStream(bais); User user = (User)ois.readObject();
18、DataInputStream和DataOutputStream的特点是?
DataInputStream 是数据输入流。它继承于FilterInputStream。
DataInputStream 是用来装饰其它输入流,它“允许应用程序以与机器无关方式从底层输入流中读取基本 Java 数据类型”。应用程序可以使用DataOutputStream(数据输出流)写入由DataInputStream(数据输入流)读取的数据。
19、【上机】使用ObjectInputstream和ObjectOutputStream实现将某个对象存储
到硬盘上,然后再读到程序中。
20、中文乱码是怎么造成的?
编码方式与解码方式额设之不当
21、unicode字符集是几个字节表示一个字符?为什么需要utf-8?
2个字节表示一个字符,
utf-8是Unicode最重要的实现方式之一。另外还有utf-16、utf-32等。UTF-8不是固定字长编码的,而是一种变长的编码方式。它可以使用1~4个字节表示一个符号,根据不同的符号而变化字节长度。这是种比较巧妙的设计,如果一个字节的第一位是0,则这个字节单独就是一个字符;如果第一位是1,则连续有多少个1,就表示当前字符占用多少个字节。
22、序列化和反序列化指的是什么?
参考这里
23、想序列化某个类的对象,该类必须实现Serializable接口吗?
必须
24、说说Serializable接口的特点。
类通过实现 java.io.Serializable 接口以启用其序列化功能。
未实现此接口的类将无法使其任何状态序列化或反序列化。
可序列化类的所有子类型本身都是可序列化的。因为实现接口也是间接的等同于继承。
序列化接口没有方法或字段,仅用于标识可序列化的语义
25、transient的作用是?
Java中transient关键字的作用,简单地说,就是让某些被修饰的成员属性变量不被序列化
参考这里
26、【上机】完成目录的copy代码(结合递归算法)
27、【上机】假设从入学开始所有书写的Java代码都在d:/sxtjava文件夹下,包括多
级子文件夹。使用IO流获取从入学开始,到目前为止已经写了多少行Java代码。
提示:获取d:/sxtjava文件夹及其子文件夹下的所有.java文件,使用readLine()读取其中每一行,每读取一行,行数加1。
28、【上机】下载并自学apache commons中的IO工具包。
百战程序员9- IO流的更多相关文章
- 黑马程序员_<<IO流基本操作(Writer,Reader)>>
--------------------ASP.Net+Android+IOS开发..Net培训.期待与您交流! -------------------- 1.概述 硬盘之间的文件的传输,硬盘中文件的 ...
- 百战程序员-xml
1.用自己的语言说出,为什么需要XML? XML 是一种元标注语言,该语言提供一种描述结构数据的格式.这有助于更精确地声明内容,方便跨越多种平台的更有意义的搜索结果.此外,XML 将起用新一代的基于 ...
- 百战程序员——Spring框架
什么是容器,我们学过了哪些容器,Spring与我们之前学习的容器有哪些异同点? 容器可以管理对象的生命周期.对象与对象之间的依赖关系,您可以使用一个配置文件(通常是XML),在上面定义好对象的名称.如 ...
- 百战程序员——JSP
JSP全称是什么?它相比servlet有什么优势?有什么劣势? JSP全名为Java Server Pages,中文名叫java服务器页面,其根本是一个简化的Servlet设计. JSP技术使用Jav ...
- 百战程序员——JDBC
JDBC全称是什么? JDBC(Java DataBase Connectivity,java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用Jav ...
- 百战程序员——EL、JSTL
1.EL表达式可以操作作用域中的属性,也可以操作普通的局部变量.对吗? 不对 El表达式一般支持作用域(application.session.request.pagecontext)中的属性.EL变 ...
- Java基础:IO流之字节流和字符流
1. 流的概念 流(stream)的概念源于UNIX中管道(pipe)的概念.在UNIX中,管道是一条不间断的字节流,用来实现程序或进程间的通信,或读写外围设备.外部文件等. 一个流,必有源端和目的端 ...
- 黑马程序员_Java基础:IO流总结
------- android培训.java培训.期待与您交流! ---------- IO流在是java中非常重要,也是应用非常频繁的一种技术.初学者要是能把IO技术的学透,java基础也就能更加牢 ...
- 黑马程序员——JAVA基础之IO流FileReader,FileWriter
------- android培训.java培训.期待与您交流! ---------- IO(Input Output)流 IO流用来处理设备之间的数据传输 Java对数据的操作是通过流的方式 J ...
随机推荐
- Loj 6036 「雅礼集训 2017 Day4」编码 - 2-sat
题目传送门 唯一的传送门 题目大意 给定$n$个串,每个串只包含 ' .问是否可能任意两个不同的串不满足一个是另一个的前缀. 2-sat的是显然的. 枚举每个通配符填0还是1,然后插入Trie树. 对 ...
- react的dva框架初试
使用背景:迫不得已!!(自己入职是以vue技术入职的,说是马上vue项目就来了,让我负责这个项目的前端.但是入职后就让我下了现在这个项目看下,然后就顺理成章的帮忙进行开发了,其实自己一直想要做reac ...
- P3327 [SDOI2015]约数个数和
思路 做这题先要知道一个性质, \[ d_{ij}=\sum_{x|i}\sum_{y|j}[(x,y)=1] \] 然后上莫比乌斯反演颓柿子就好了 \[ \begin{align}&\sum ...
- Python标准模块--concurrent.futures(进程池,线程池)
python为我们提供的标准模块concurrent.futures里面有ThreadPoolExecutor(线程池)和ProcessPoolExecutor(进程池)两个模块. 在这个模块里他们俩 ...
- 《F4+2》—基于原型的团队项目需求调研与分析
任务一 1.调研对象 老师和学生 2.所开发的软件原型 太阳系模型软件 3.调研方法 问卷调查法 原型法 任务二 采用UML模型描述任务1所获取的用户需求,如下: 主要需求: 教师:把系统展示给学生, ...
- cmd 查看端口
windows + R 调出cmd窗口 输入 netstat -nao 查看端口使用情况 输入netstat -nao | findstr 80查找指定端口 杀死指定端口的进程taskkill /pi ...
- shell脚本中if
[[ $i =~ ^[0-9]+$ ]] && echo 1 的解释 =~ 表示的是匹配 && 是前一个命令为真 才执行后一个命令 [[ ]] 是if判断使用正则表达式 ...
- Java集合框架源码分析(2)LinkedList
链表(LinkedList) 数组(array)和数组列表(ArrayList)都有一个重大的缺陷: 从数组的中间位置删除一个元素要付出很大的代价,因为数组中在被删除元素之后的所有元素都要向数组的前端 ...
- 全排列 next_permutation 用法
给一个正整数n,让你求它的全排列 先介绍一个函数,iota(a,a+n,1) 用法就是把a数组的第0位到第n-1位依次赋为1,2,.....n: 然后是next_permutation(a,a+4)函 ...
- webstorm激活教程
虽然webStorm,phpStorm以及jetbrains系列的很好用,但是每隔一段时间就需要激活一下,这样太费劲了,今天军哥给大家推荐一个永久激活的办法 此教程适用于jetbrains 的所有系列 ...