黑马程序员技术交流社区

标题: 刘鹏 [打印本页]

作者: 卞建彬    时间: 2018-9-28 16:50
标题: 刘鹏

Java中实现递归的方式:

         方法内部调用方法自己 (所以必须定义方法)


递归的分类:

         直接递归: 方法自己调用方法

         间接递归: A方法调用B方法, B方法调用C方法, C方法调用A方法

      

递归时的注意事项:

   1. 递归要有限定条件(出口), 保证递归能够停止(就是在某种情况下方法不再调用自己), 否则会栈内存溢出

   2. 递归次数不能太多, 否则会栈内存溢出

   3. 构造方法不能递归


递归的使用前提:

         调用方法时, 方法的主体不变, 但每次传递的参数值不同, 可以使用递归


IO: 输入(Input)输出(Output)

: 数据流


输入: 从硬盘(文件)读取到内存(Java程序)

输出: 从内存(Java程序)写入到硬盘(文件)


IO流的分类:

    字节流 (读写字节: byte, 可以读写所有类型的文件, 包括视频, 图片, 音频, 文本等)

       字节输入流: java.io.InputStream 抽象类

       字节输出流: java.io.OutputStream 抽象类

    字符流 (读写字符: char, String,只能读写文本文件)

       字符输入流: java.io.Reader 抽象类

       字符输出流: java.io.Writer 抽象类


向文件中写入字节数据时, 十进制的数字会被转换为"二进制"的数字写入文件


文本编辑器打开文本文件时, 会先查询编码表, 将二进制数字转换为对应的字符进行显示

         0-127:查询ASCII码表  -128~127

         其他: 查询系统默认码表

                            Windows简体中文系统的程序打开是按GBK 码表

                            IDEA中使用的是 UTF-8 码表   


java.io.FileOutputStream: 文件字节输出流

         //带有 续写 功能的构造方法, 不会清空文件

         FileOutputStream(String name,boolean append): 通过文件路径创建流, true可以续写

         FileOutputStream(File file,boolean append): 通过File对象创建流, true可以续写



java.io.Reader抽象类: 字符输入流 (顶层)

         //常用成员方法

         void close():关闭此流并释放与此流相关联的任何系统资源

         //

         int read():一次读一个字符char, 返回读到的字符.

             读到文件末尾返回-1  (返回int为了代码编写方便)

         int read(char[] cbuf):一次读取一个字符数组char[]

                   返回读取的字符个数. 读到文件末尾返回-1

   

java.io.FileReader: 文件字符输入流

         //构造方法

         FileReader(File file):根据File对象创建文件字符输入流

         FileReader(String fileName):根据File对象创建文件字符输入流


flush(): 刷新缓冲区 (将数据从内存中写入到磁盘)

         close():刷新缓冲区, 并释放资源. 关闭流后不能再用同一个流对象操作


缓冲流的原理:

         底层也是使用基本流(FileXxx)来读写

         但缓冲流内部定义了一个缓冲数组, 在读的时候类似于我们一次读一个数组的方式, 减少了磁盘操作次数, 提高了程序效率


BufferedOutputStream使用步骤:

         1.创建FileOutputStream对象, 构造方法中绑定要输出的目的地

         2.创建BufferedOutputStream对象, 构造方法中传递FileOutputStream对象

         3.使用BufferedOutputStream对象中的方法write(), 把数据写入到内部缓冲区中

         4.使用BufferedOutputStream对象中的方法flush(), 把内部缓冲区中的数据,刷新到文件中

         5.释放资源(会先调用flush方法刷新数据, 4步可以省略)








欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2