week6

关于io流:

I\O操作指的是输入和输出流的操作,相对内存而言,当我们从数据源中将数据读取到内存中,就是输入流,也叫读取流。当我们将内存中处理好的数据写入数据源,就是输出流,也叫写入流。

流按照内容分类;分为三种,

字节流
字符流
对象流

其实真正的流只有一种;字节流,数据的传输在底层都是以二进制方式传输,所以无论是哪种流,都是字节流。而字符流和对象流是在字节流基础上,做了一层封装,以方便对字符数据和对象数据进行操作。

所有字节流的父类,InputStream和OutputStream
所有字符流的父类;Reader和Writer

流操作步骤,
1.建立流,建立内存和数据源之间传输数据的通道。
2.操作流,操作传输的数据
3.关闭流,关闭内存和数据源之间的通道,释放资源

当操作文件流时,如果文件不存在,读取流会抛出FileNotFoundException错误。写入流会创建新文件

输入流和输出流相对于内存设备而言.

将外设中的数据读取到内存中:输入
将内存的数写入到外设中:输出。

字符流的由来:
其实就是:字节流读取文字字节数据后,不直接操作而是先查指定的编码表。获取对应的文字。
在对这个文字进行操作。简单说:字节流+编码表

---------------------------------------

字节流的两个顶层父类:
1,InputStream 2,OutputStream.

字符流的两个顶层父类:
1,Reader 2,Writer

这些体系的子类都以父类名作为后缀。
而且子类名的前缀就是该对象的功能。

==========================

字符流缓冲区:
BufferedWriter
:newLine();

BufferedReader:
: readLine();

使用缓冲区复制一个文本文件。

装饰设计模式:
对一组对象的功能进行增强时,就可以使用该模式进行问题的解决。

装饰和继承都能实现一样的特点:进行功能的扩展增强。

有什么区别呢?

首先有一个继承体系。
Writer
|--TextWriter:用于操作文本
|--MediaWriter:用于操作媒体。

想要对操作的动作进行效率的提高。
按照面向对象,可以通过继承对具体的进行功能的扩展。
效率提高需要加入缓冲技术。

Writer
|--TextWriter:用于操作文本
|--BufferTextWriter:加入了缓冲技术的操作文本的对象。
|--MediaWriter:用于操作媒体。
|--BufferMediaWriter:

class Buffer{
Buffer(TextWriter w)
{}

Buffer(MediaWirter w)
{

}
}
class BufferWriter extends Writer{
BufferWriter(Writer w)
{
}
}
Writer
|--TextWriter:用于操作文本
|--MediaWriter:用于操作媒体。
|--BufferWriter:用于提高效率。

装饰比继承灵活。

特点:装饰类和被装饰类都必须所属同一个接口或者父类。

--------------------------------------

字节流:

InputStream

OutputStream

字节流:
FileInputStream
FileOutputStream
BufferedInputStream
BufferedOutputStream
字符流:
Writer Reader
FileReader
FileWriter
BufferedReader
BufferedWriter

================================================================

转换流:
InputStreamReader :字节到字符的桥梁。解码。
OutputStreamWriter:字符到字节的桥梁。编码。

流的操作规律:

1,明确源和目的(汇)
源:InputStream Reader
目的:OutputStream Writer

2,明确数据是否是纯文本数据。
源:是纯文本:Reader
否:InputStream
目的:是纯文本 Writer
否:OutputStream

3,明确具体的设备。
源设备:
硬盘:File
键盘:System.in
内存:数组
网络:Socket流

目的设备:
硬盘:File
控制台:System.out
内存:数组
网络:Socket流

4,是否需要其他额外功能。
1,是否需要高效(缓冲区);
是,就加上buffer.
2,转换。

需求1:复制一个文本文件。
1,明确源和目的。
源:InputStream Reader
目的:OutputStream Writer
2,是否是纯文本?
是!
源:Reader
目的:Writer

3,明确具体设备。
源:
硬盘:File
目的:
硬盘:File

FileReader fr = new FileReader("a.txt");
FileWriter fw = new FileWriter("b.txt");

4,需要额外功能吗?
需要,需要高效。
BufferedReader bufr = new BufferedReader(new FileReader("a.txt"));
BufferedWriter bufw = new BufferedWriter(new FileWriter("b.txt"));

================================================

需求2:读取键盘录入信息,并写入到一个文件中。

1,明确源和目的。
源:InputStream Reader
目的:OutputStream Writer
2,是否是纯文本呢?
是,
源:Reader
目的:Writer
3,明确设备
源:
键盘。System.in
目的:
硬盘。File

InputStream in = System.in;
FileWriter fw = new FileWriter("b.txt");

4,需要额外功能吗?
需要。转换。 将字节流转成字符流。因为名确的源是Reader,这样操作文本数据做便捷。
所以要将已有的字节流转成字符流。使用字节-->字符 。InputStreamReader
InputStreamReader isr = new InputStreamReader(System.in);
FileWriter fw = new FileWriter("b.txt");

BufferedReader bufr = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bufw = new BufferedWriter(new FileWriter("b.txt"));

===================================================

需求3:将一个文本文件数据显示在控制台上。
1,明确源和目的。
源:InputStream Reader
目的:OutputStream Writer
2,是否是纯文本呢?
是,
源:Reader
目的:Writer
3,明确具体设备
源:
硬盘:File
目的:
控制台:System.out

FileReader fr = new FileReader("a.txt");
OutputStream out = System.out;//PrintStream
4,需要额外功能吗?
需要,转换。
FileReader fr= new FileReader("a.txt");
OutputStreamWriter osw = new OutputStreamWriter(System.out);
需要,高效。
BufferedReader bufr = new BufferedReader(new FileReader("a.txt"));
BufferedWriter bufw = new BufferedWriter(new OutputStreamWriter(System.out));

================================================================

需求4:读取键盘录入数据,显示在控制台上。
1,明确源和目的。
源:InputStream Reader
目的:OutputStream Writer
2,是否是纯文本呢?
是,
源:Reader
目的:Writer
3,明确设备。
源:
键盘:System.in
目的:
控制台:System.out

InputStream in = System.in;
OutputStream out = System.out;

4,明确额外功能?
需要转换,因为都是字节流,但是操作的却是文本数据。
所以使用字符流操作起来更为便捷。
InputStreamReader isr = new InputStreamReader(System.in);
OutputStreamWriter osw = new OutputStreamWriter(System.out);

为了将其高效。
BufferedReader bufr = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bufw = new BufferedWriter(new OutputStreamWriter(System.out));

============================================================

5,将一个中文字符串数据按照指定的编码表写入到一个文本文件中.

1,目的。OutputStream,Writer
2,是纯文本,Writer。
3,设备:硬盘File
FileWriter fw = new FileWriter("a.txt");
fw.write("你好");

注意:既然需求中已经明确了指定编码表的动作。
那就不可以使用FileWriter,因为FileWriter内部是使用默认的本地码表。
只能使用其父类。OutputStreamWriter.
OutputStreamWriter接收一个字节输出流对象,既然是操作文件,那么该对象应该是FileOutputStream

OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream("a.txt"),charsetName);

需要高效吗?
BufferedWriter bufw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream("a.txt"),charsetName));

什么时候使用转换流呢?

1,源或者目的对应的设备是字节流,但是操作的却是文本数据,可以使用转换作为桥梁。
提高对文本操作的便捷。
2,一旦操作文本涉及到具体的指定编码表时,必须使用转换流 。

时间: 2024-10-19 03:02:06

week6的相关文章

【coursera笔记】Machine Learning(Week6)

发现自己不写总结真是件很恶劣的事情,好多学的东西没有自己总结都忘记了.所以决定从今天开始,学东西的时候一定跟上总结. 我写的东西大多数是自己通俗的总结,不太喜欢写严格的定义或者证明,写了也记不住,欢迎指正. 1. High Bias vs. High Variance High Bias:通常是因为模型过于简单,使得不能成功拟合数据.比如说一些有二次曲线特性的数据,如果用一次直线去拟合就会出现这个问题,所以它对应了Underfitting问题.另外,从泛化角度来说,这样的模型泛化程度更高. Hi

ZROI week6

ZROI week6 T1 用一个类似背包的东西记录答案. T2 好像直接用|操作即可. T3 瞎搞就完事了 T4 启发式合并,然而变量写错了,就没了... 总结 100 + 100 + 100 + 0 = 300 原文地址:https://www.cnblogs.com/akoasm/p/10306998.html

【week6】团队贡献分

小组名称:nice! 小组成员:李权 于淼 杨柳 刘芳芳 项目内容:约跑app 完成任务:   10% 20% 70% 好   于淼 李权 中   刘芳芳 杨柳 差       1.李权8.4 2.于淼5.6 3.杨柳3.6 4.刘芳芳2.4 根据上面的表格,(水平权重表示成员完成任务对整个项目重要程度竖直权重表示成员任务完成情况) 我取竖直好-70%,中-30%,水平20%-40%,70%-60% 综合水平竖直比例,以及总分20计算出各成员分数. 李权同学完成了大部分的代码,包括数据库传值.将

斯坦福机器学习视频笔记 Week6 关于机器学习的建议 Advice for Applying Machine Learning

我们将学习如何系统地提升机器学习算法,告诉你学习算法何时做得不好,并描述如何'调试'你的学习算法和提高其性能的"最佳实践".要优化机器学习算法,需要先了解可以在哪里做最大的改进. 我们将讨论如何理解具有多个部分的机器学习系统的性能,以及如何处理偏斜数据. Evaluating a Hypothesis 设想当你训练的模型对预测数据有很大偏差的时候,接下来你会选择怎么做? 这个需要花时间去实现,但是对你的帮助也会很大,使你不盲目的做一些决定来提升算法,而是直观地看出哪些是对提升算法是有效

Python笔记总结week6

关于创建.调用模块 1.我们创建一个模块commons.py,  并且在文件中写以下三个函数: def login(): print('登录') def logout(): print('退出') def home(): print('主页面') 2. 在同一指引下创建另一个文件,在此文件中调用commons.py文件中的函数: import commons def run(): inp = 'login' if inp =='login': commons.login() if inp =='

week6:个人博客作业

这周主要是参与团队编程的讨论 团队编程中发现很多问题: 1,每个人共同空闲的时间不好找 就我组来说,我是考研,每天晚上都要去外面上课,有的人在进行大创,,也有的像我一样在整考研的东西,还有的进行其他,白天不上课的时间我是在处理考研的东西再加当天学习的复习,其他人白天时间都有各自要干的事情,这样我们真正各自有空闲的时间只有晚上9.30—10.0(我上完考研课回到寝室),当我会到寝室后,我有空闲时间,小组的其他成员不一定有空闲时间,就这样我们一直推了好多天,直到周4晚上,大家才有时间.晚上在寝室中讨

【week6】psp

本周psp 饼图: 随笔字数折线图: 代码量折线图:

Week6(10月14日)

Part I:提问  =========================== 1.什么是视图模型?2.我们在留言本中,加入了一个怎样的视图模型?如何处理它? Part II:Ch05 视图模型 =========================== 要点: 1.知识点5-1:视图模型

Week6(10月17日):周末别忘记运动

Part I:提问  =========================== 1.多对多关系的数据实体,如何创建模型类? 已知汽车4S店需开发一个客户关系管理系统(CRM),请为其中的客户和汽车对象建立模型类. 2.已知代码如下 [DatabaseGenerated(DatabaseGeneratedOption.None)] public int CourseID { get; set; } 请问[DatabaseGenerated(DatabaseGeneratedOption.None)]