• 第六周学习总结


    教材学习内容总结

    - 流与IO

    流的概念和作用

    流是一组有顺序的,有起点和终点的字节集合,是对数据传输的总称或抽象。即数据在两设备间的传输称为流,流的本质是数据传输,根据数据传输特性将流抽象为各种类,方便更直观的进行数据操作。

    IO流的分类
    • 根据处理数据类型的不同分为:字符流和字节流
    • 根据数据流向不同分为:输入流和输出流

    字符流和字节流

    字符流的由来:因为数据编码的不同,而有了对字符进行高效操作的流对象。本质其实就是基于字节流读取时,去查了指定的码表。

    字节流和字符流的区别:读写单位不同:字节流以字节(8bit)为单位,字符流以字符为单位,根据码表映射字符,一次可能读多个字节。
    处理对象不同:字节流能处理所有类型的数据(如图片、avi等),而字符流只能处理字符类型的数据。
    结论:只要是处理纯文本数据,就优先考虑使用字符流。 除此之外都使用字节流。

    输入流和输出流

    对输入流只能进行读操作,对输出流只能进行写操作,程序中需要根据待传输数据的不同特性而使用不同的流

    Java IO流对象

    1.输入字节流InputStreamIO 中输入字节流的继承

    1.InputStream 是所有的输入字节流的父类,它是一个抽象类。

    2.ByteArrayInputStream、StringBufferInputStream、FileInputStream 是三种基本的介质流,它们分别从Byte 数组、StringBuffer、和本地文件中读取数据。PipedInputStream 是从与其它线程共用的管道中读取数据,与Piped 相关的知识后续单独介绍。

    3.ObjectInputStream 和所有FilterInputStream 的子类都是装饰流(装饰器模式的主角)。

    2.输出字节流OutputStream

    1.OutputStream 是所有的输出字节流的父类,它是一个抽象类。

    2.yteArrayOutputStream、FileOutputStream 是两种基本的介质流,它们分别向Byte 数组、和本地文件中写入数据。PipedOutputStream 是向与其它线程共用的管道中写入数据,

    3.ObjectOutputStream 和所有FilterOutputStream 的子类都是装饰流。

    File类

    File类是对文件系统中文件以及文件夹进行封装的对象,可以通过对象的思想来操作文件和文件夹。 File类保存文件或目录的各种元数据信息,包括文件名、文件长度、最后修改时间、是否可读、获取当前文件的路径名,判断指定文件是否存在、获得当前目录中的文件列表,创建、删除文件和目录等方法。

    RandomAccessFile类

    该对象并不是流体系中的一员,其封装了字节流,同时还封装了一个缓冲区(字符数组),通过内部的指针来操作字符数组中的数据。 该对象特点:

    该对象只能操作文件,所以构造函数接收两种类型的参数:a.字符串文件路径;b.File对象。
    该对象既可以对文件进行读操作,也能进行写操作,在进行对象实例化时可指定操作模式(r,rw)

    InputStream与OutputStream

    想活用输入/输出API,一定要先了解Java中如何以串流(Stream)抽象化输入/输出概念,以及InputStream、OutputStream继承架构。如此一来,无论标准输入/输出、文档输入/输出、网络输入/输出、数据库输入/输出等都可用一致的操作进行处理。

    串流设计的概念

    Java将输入/输出抽象化为串流,数据有来源及目的地,衔接两者的是串流对象。比喻来说,数据就好比水,串流好比水管,通过水管的衔接,水由一端流向另一端,

    InputStream用来进行数据读取,而OutputStream用来进行数据写入。接口描述

     public abstract class InputStream implements Closeable {
         public abstract int read() throws IOException;
         public int read(byte b[]) throws IOException;
         public int read(byte b[], int off, int len) throws IOException;
         public long skip(long n) throws IOException;
         public void close() throws IOException;
         public synchronized void mark(int readlimit);
         public synchronized void   reset() throws IOException;
         //...
     }
    
     Public abstract class OutputStream implements Closeable, Flushable {
        public abstract void write(int b) throws IOException;
        public void write(byte b[]) throws IOException;
        public void write(byte b[], int off, int len) throws IOException;
        public void flush() throws   IOException;
        public void close() throws IOException;
    }
    

    Reader与Writer继承架构

    针对字符数据的读取,Java SE提供了java.io.Reader类,其抽象化了字符数据读入的来源。

    针对字符数据的写入,则提供了java.io.Writer类。其抽象化了数据写出的目的地。

    -StringReader可以将字符串打包,当作读取来源,StringWriter则可以作为写入目的地,最后用toString()取得所有写入的字符组成的字符串。

    FileReader、FileWriter则可以对文档做读取与写入,读取或写入时默认会使用操作系统默认编码来做字符转换。
    在启动JVM时,可以指定-Dfile.encoding来指定FileReader、FileWriter所使用的编码。

    1.InputStreamReader与OutputStreamWriter

    InputStreamReader、OutputStreamWriter对串流数据打包。
    2.BufferedReader与BufferedWriter

    BufferedReader、BufferedWriter可对Reader、Writer提供缓冲区作用,在处理字符输入/输出时,对效率也会有所帮助。
    3.PrintWriter

    PrintWriter、PrintStream使用上极为类似,不过除了可以对OutputStream打包之外,PrintWriter还可以对Writer进行打包,提供print()、println()、format()等方法。 11.1线程

    教材学习中的问题和解决过程

    System.SetIn(new FileInputStream(args[0])); 方法名称首字母大写会出现错误,setIn()这里的setIn是属于关键字还是方法名称的书写规范影响呢?

    代码调试中的问题和解决过程

    问题1:XXXXXX

    问题1解决方案:XXXXXX

    问题2:XXXXXX

    问题2解决方案:XXXXXX

    代码托管


    上周考试错题总结

    • CH06填空:父类和子类要有(ISA 或“是一种”)关系

    • CH06判断:可以用父类声明对象引用,用子类生成对象,但需要强制类型转换。(X)

    • CH06填空:Java中通过(继承)和接口实现多态。

    • CH06判断:父类中有个public void fight(),子类中有个public void fight( Weapon w),这两个方法的关系是Override.(X)

    • CH06填空:标注(@Override)可以从语法上保证方法的Override.

    结对及互评

    评分标准

    • 正确使用Markdown语法(加1分):

    • 不使用Markdown不加分

    • 有语法错误的不加分(链接打不开,表格不对,列表不正确...)

    • 排版混乱的不加分

    • 模板中的要素齐全(加1分)

    • 缺少“教材学习中的问题和解决过程”的不加分

    • 缺少“代码调试中的问题和解决过程”的不加分

    • 代码托管不能打开的不加分

    • 缺少“结对及互评”的不能打开的不加分

    • 缺少“上周考试错题总结”的不能加分

    • 缺少“进度条”的不能加分

    • 缺少“参考资料”的不能加分

    • 教材学习中的问题和解决过程, 一个问题加1分

    • 代码调试中的问题和解决过程, 一个问题加1分

    • 本周有效代码超过300分行的(加2分)

    • 一周提交次数少于20次的不加分

    其他加分:

    • 周五前发博客的加1分

    • 感想,体会不假大空的加1分

    • 排版精美的加一分

    • 进度条中记录学习时间与改进情况的加1分

    • 有动手写新代码的加1分

    • 课后选择题有验证的加1分

    • 代码Commit Message规范的加1分

    • 错题学习深入的加1分

    • 点评认真,能指出博客和代码中的问题的加1分

    • 结对学习情况真实可信的加1分

    扣分:

    • 有抄袭的扣至0分

    • 代码作弊的扣至0分

    • 迟交作业的扣至0分

    点评过的同学博客和代码

    其他(感悟、思考等,可选)

    xxx
    xxx

    学习进度条

    代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
    目标 5000行 30篇 400小时
    第六周 400/1021 1/9 30/90

    参考:软件工程软件的估计为什么这么难软件工程 估计方法

    • 计划学习时间:21小时

    • 实际学习时间:10小时

    • 改进情况:

    (有空多看看现代软件工程 课件
    软件工程师能力自我评价表
    )

    参考资料

  • 相关阅读:
    Mysql-函数coalesce-查询为空设置默认值
    js-定时任务setInterval,setTimeout,clearInterval,clearTimeout
    Json-转换
    Hibernate-Criteria用法
    Js-字符转换数字
    Mysql-日期转换
    Freemarker-数字默认格式化问题
    Freemarker-标签使用
    算法-毛利率
    Hibernate-org.hibernate.QueryException: could not resolve property: code of:
  • 原文地址:https://www.cnblogs.com/lyx1996/p/6658012.html
Copyright © 2020-2023  润新知