javaIO之字符流(字符流=字节流+编码表)装饰器模式loveincode

计算机并不区分二进制文件与文本文件。所有的文件都是以二进制形式来存储的,因此,

从本质上说,所有的文件都是二进制文件。所以字符流是建立在字节流之上的,它能够提供字符

层次的编码和解码。列如,在写入一个字符时,Java虚拟机会将字符转为文件指定的编码(默认

是系统默认编码),在读取字符时,再将文件指定的编码转化为字符。

常见的码表如下:

ASCII:美国标准信息交换码。用一个字节的7位可以表示。

ISO8859-1:拉丁码表。欧洲码表,用一个字节的8位表示。又称Latin-1(拉丁编码)或“西欧语言”。ASCII码是包含的仅仅是英文字母,并且没有完全占满256个编码位置,所以它以ASCII为基础,在空置的0xA0-0xFF的范围内,加入192个字母及符号,

藉以供使用变音符号的拉丁字母语言使用。从而支持德文,法文等。因而它依然是一个单字节编码,只是比ASCII更全面。

GB2312:英文占一个字节,中文占两个字节.中国的中文编码表。

GBK:中国的中文编码表升级,融合了更多的中文文字符号。

Unicode:国际标准码规范,融合了多种文字。所有文字都用两个字节来表示,Java语言使用的就是unicode。

UTF-8:最多用三个字节来表示一个字符。

(我们以后接触最多的是iso8859-1、gbk、utf-8)

查看上述码表后,很显然中文的‘中’在iso8859-1中是没有对映的编码的。或者一个字符在2中码表中对应的编码不同,例如有一些字在不同的编码中是有交集的,例如bjg5和gbk中的汉字简体和繁体可能是一样的,就是有交集,但是在各自码表中的数字不一样。

例如

使用gbk将中文保存在计算机中,

中国

对映100200如果使用big5打开

可能?...

不同的编码对映的是不一样的。

很显然,我们使用什么样的编码写数据,就需要使用什么样的编码来对数据。

ISO8859-1:一个字节

GBK:两个字节包含了英文字符和扩展的中文ISO8859-1+中文字符

UTF-8万国码,推行的。是1~3个字节不等长。英文存的是1个字节,中文存的是3个字节,是为了节省空间。

那么我们之前学习的流称之为字节流,以字节为单位进行操作之情的操作全是英文,如果想要操作中文呢?

测试:将指定位置的文件通过字节流读取到控制台

publicclassTestIo{publicstaticvoidmain(String[]args)throwsIOException{Stringpath="c:\\a.txt";writFileTest();readFileByInputStream(path);}privatestaticvoidreadFileByInputStream(Stringpath)throwsIOException{FileInputStreamfis=newFileInputStream(path);intlen=0;while((len=fis.read())!=-1){System.out.print((char)len);}}privatestaticvoidwritFileTest()throwsFileNotFoundException,IOException{//创建文件对象Filefile=newFile("c:\\a.txt");//创建文件输出流FileOutputStreamfos=newFileOutputStream(file);fos.write("中国".getBytes());fos.close();}}

发现控制台输出的信息:

ú是这样的东西,打开a.txt文本发现汉字”中国”确实写入成功。

那么说明使用字节流处理中文有问题。

仔细分析,我们的FileInputStream输入流的read()一次是读一个字节的,返回的是一个int显然进行了自动类型提升。那么我们来验证一下“中国”对应的字节是什么

使用:"中国".getBytes()即可得到字符串对应的字节数组。是[-42,-48,-71,-6]

同样,将read方法返回值直接强转为byte,发现结果也是-42,-48,-71,-6。

publicclassTestIo{publicstaticvoidmain(String[]args)throwsIOException{Stringpath="c:\\a.txt";writFileTest();readFileByInputStream(path);//查看中国对应的编码System.out.println(Arrays.toString("中国".getBytes()));}privatestaticvoidreadFileByInputStream(Stringpath)throwsIOException{FileInputStreamfis=newFileInputStream(path);intlen=0;while((len=fis.read())!=-1){System.out.println((byte)len);}}privatestaticvoidwritFileTest()throwsFileNotFoundException,IOException{//创建文件对象Filefile=newFile("c:\\a.txt");//创建文件输出流FileOutputStreamfos=newFileOutputStream(file);fos.write("中国\r\n".getBytes());fos.close();}}

那么中国对应的是-42,-48,-71,-6是4个字节。那就是一个中文占2个字节,(这个和编码是有关系的)

很显然,我们的中文就不能够再一个字节一个字节的读了。所以字节流处理字符信息时并不方便那么就出现了字符流。

字节流是字符流是以字符为单位。

体验字符流:

publicstaticvoidmain(String[]args)throwsIOException{Stringpath="c:\\a.txt";readFileByReader(path);}privatestaticvoidreadFileByReader(Stringpath)throwsIOException{FileReaderfr=newFileReader(path);intlen=0;while((len=fr.read())!=-1){System.out.print((char)len);}}

总结:字符流就是:字节流+编码表,为了更便于操作文字数据。字符流的抽象基类:

Reader,Writer。

由这些类派生出来的子类名称都是以其父类名作为子类名的后缀,如FileReader、FileWriter。

方法:

1,intread():

读取一个字符。返回的是读到的那个字符。如果读到流的末尾,返回-1.

2,intread(char[]):

将读到的字符存入指定的数组中,返回的是读到的字符个数,也就是往数组里装的元素的个数。如果读到流的末尾,返回-1.

3,close()

读取字符其实用的是window系统的功能,就希望使用完毕后,进行资源的释放

publicclassIoTest1_Reader{publicstaticvoidmain(String[]args)throwsException{Stringpath="c:/a.txt";//readFileByInputStream(path);readFileByReader(path);}/***使用字节流读取文件内容**@parampath*/publicstaticvoidreadFileByInputStream(Stringpath)throwsException{InputStreamin=newFileInputStream(path);intlen=0;while((len=in.read())!=-1){System.out.print((char)len);}in.close();}/***使用字符流读取文件内容*/publicstaticvoidreadFileByReader(Stringpath)throwsException{Readerreader=newFileReader(path);intlen=0;while((len=reader.read())!=-1){System.out.print((char)len);}reader.close();}}

Writer中的常见的方法:

1,write(ch):将一个字符写入到流中。

2,write(char[]):将一个字符数组写入到流中。

3,write(String):将一个字符串写入到流中。

4,flush():刷新流,将流中的数据刷新到目的地中,流还存在。

5,close():关闭资源:在关闭前会先调用flush(),刷新流中的数据去目的地。然流关闭。

publicclassIoTest2_Writer{publicstaticvoidmain(String[]args)throwsException{Stringpath="c:/ab.txt";writeToFile(path);}/***写指定数据到指定文件中**/publicstaticvoidwriteToFile(Stringpath)throwsException{Writerwriter=newFileWriter(path);writer.write('中');writer.write("世界".toCharArray());writer.write("中国");writer.close();}}

2:追加文件:

默认的FileWriter方法新值会覆盖旧值,想要实现追加功能需要

使用如下构造函数创建输出流append值为true即可。

FileWriter(StringfileName,booleanappend)

FileWriter(Filefile,booleanappend)

3:flush方法

如果使用字符输出流,没有调用close方法,会发生什么

privatestaticvoidwriteFileByWriter(Filefile)throwsIOException{FileWriterfw=newFileWriter(file);fw.write('新');fw.flush();fw.write("中国".toCharArray());fw.write("世界你好!!!".toCharArray());fw.write("明天");//关闭流资源//fw.close();}

程序执行完毕打开文件,发现没有内容写入.原来需要使用flush方法.刷新该流的缓冲。

为什么只要指定close方法就不用再flush方法,因为close也调用了flush方法.

一个文本文件中有中文有英文字母,有数字。想要把这个文件拷贝到别的目录中。

我们可以使用字节流进行拷贝,使用字符流呢?肯定也是可以的。

publicstaticvoidmain(String[]args)throwsException{Stringpath1="c:/a.txt";Stringpath2="c:/b.txt";copyFile(path1,path2);}/***使用字符流拷贝文件*/publicstaticvoidcopyFile(Stringpath1,Stringpath2)throwsException{Readerreader=newFileReader(path1);Writerwriter=newFileWriter(path2);intch=-1;while((ch=reader.read())!=-1){writer.write(ch);}reader.close();writer.close();}

但是这个一次读一个字符就写一个字符,效率不高。把读到的字符放到字符数组中,再一次性的写出。

publicstaticvoidmain(String[]args)throwsException{Stringpath1="c:/a.txt";Stringpath2="c:/b.txt";copyFile(path1,path2);}publicstaticvoidcopyFile3(Stringpath1,Stringpath2)throwsException{Readerreader=newFileReader(path1);Writerwriter=newFileWriter(path2);intch=-1;char[]arr=newchar[1024];while((ch=reader.read(arr))!=-1){writer.write(arr,0,ch);}reader.close();writer.close();}

字节流可以拷贝视频和音频等文件,那么字符流可以拷贝这些吗?

经过验证拷贝图片是不行的。发现丢失了信息,为什么呢?

计算机中的所有信息都是以二进制形式进行的存储(1010)图片中的也都是二进制

在读取文件的时候字符流自动对这些二进制按照码表进行了编码处理,但是图片本来就是二进制文件,不需要进行编码。有一些巧合在码表中有对应,就可以处理,并不是所有的二进制都可以找到对应的。信息就会丢失。所以字符流只能拷贝以字符为单位的文本文件

(以ASCII码为例是127个,并不是所有的二进制都可以找到对应的ASCII,有些对不上的,就会丢失信息。)

publicstaticvoidmain(String[]args)throwsException{Stringpath1="c:/a.txt";Stringpath2="c:/b.txt";copyFile2(path1,path2);}/***使用字符流拷贝文件,有完善的异常处理*/publicstaticvoidcopyFile2(Stringpath1,Stringpath2){Readerreader=null;Writerwriter=null;try{//打开流reader=newFileReader(path1);writer=newFileWriter(path2);//进行拷贝intch=-1;while((ch=reader.read())!=-1){writer.write(ch);}}catch(Exceptione){thrownewRuntimeException(e);}finally{//关闭流,注意一定要能执行到close()方法,所以都要放到finally代码块中try{if(reader!=null){reader.close();}}catch(Exceptione){thrownewRuntimeException(e);}finally{try{if(writer!=null){writer.close();}}catch(Exceptione){thrownewRuntimeException(e);}}}}

查看Reader发现Reader,操作的是字符,我们就不需要进行编码解码操作,由字符流读到二进制,自动进行解码得到字符,写入字符自动编码成二进制.

Reader有一个子类BufferedReader。子类继承父类显然子类可以重写父类的方法,也可以增加自己的新方法。例如一次读一行就是常用的操作.那么BufferedReader类就提供了这个方法,可以查看readLine()方法具备一次读取一个文本行的功能。很显然,该子类可以对功能进行增强。

体验BufferedReader

publicclassIoTest_BufferedReader{publicstaticvoidmain(String[]args)throwsIOException{readFile("c:\\a.txt");}privatestaticvoidreadFile(Stringpath)throwsIOException{Readerread=newFileReader(path);BufferedReaderbr=newBufferedReader(read);Stringline=null;while((line=br.readLine())!=null){System.out.println(line);}}}

注意:

在使用缓冲区对象时,要明确,缓冲的存在是为了增强流的功能而存在,所以在建立缓冲区对象时,要先有流对象存在.

缓冲区的出现提高了对流的操作效率。原理:其实就是将数组进行封装。

使用字符流缓冲区拷贝文本文件.

publicclassDemo7{publicstaticvoidmain(String[]args)throwsIOException{//关联源文件FilesrcFile=newFile("c:\\linux大纲.txt");//关联目标文件FiledestFile=newFile("d:\\linux大纲.txt");//实现拷贝copyFile(srcFile,destFile);}privatestaticvoidcopyFile(FilesrcFile,FiledestFile)throwsIOException{//创建字符输入流FileReaderfr=newFileReader(srcFile);//创建字符输出流FileWriterfw=newFileWriter(destFile);//字符输入流的缓冲流BufferedReaderbr=newBufferedReader(fr);//字符输出流的缓冲流BufferedWriterbw=newBufferedWriter(fw);Stringline=null;//一次读取一行while((line=br.readLine())!=null){//一次写出一行.bw.write(line);//刷新缓冲bw.flush();//进行换行,由于readLine方法默认没有换行.需要手动换行bw.newLine();}//关闭流br.close();bw.close();}}

需求:想要在读取的文件的每一行添加行号。

publicclassIoTest7_BufferedReader{publicstaticvoidmain(String[]args)throwsIOException{readFile("c:\\a.txt");}privatestaticvoidreadFile(Stringpath)throwsIOException{Readerread=newFileReader(path);BufferedReaderbr=newBufferedReader(read);intcount=0;Stringline=null;while((line=br.readLine())!=null){count++;System.out.println(count+":"+line);}}}

很容易的就可以实现。如果每次使用BufferedReader输出时都需要显示行号呢每次都加很显然,我们的BufferedReader继承了Reader对父类进行了功能的增强,那么我们也可以继承BufferedReader重写该类的readLine方法,进行功能的增强.

publicclassIoTest_BufferedReader{publicstaticvoidmain(String[]args)throwsIOException{readFile("c:\\a.txt");}privatestaticvoidreadFile(Stringpath)throwsIOException{Readerread=newFileReader(path);BufferedReaderbr=newMyBufferedReader(read);Stringline=null;while((line=br.readLine())!=null){System.out.println(line);}}}classMyBufferedReaderextendsBufferedReader{publicMyBufferedReader(Readerread){super(read);}intcount;@OverridepublicStringreadLine()throwsIOException{Stringline=super.readLine();if(line!=null){count++;returncount+":"+line;}else{returnnull;}}}

需求:

要在输出的一行前加上引号

可以再定义一个BufferedReader的子类,继承BufferedReader增强功能.

publicclassIoTest_BufferedReader{publicstaticvoidmain(String[]args)throwsIOException{readFile("c:\\a.txt");}privatestaticvoidreadFile(Stringpath)throwsIOException{Readerread=newFileReader(path);BufferedReaderbr=newMyQutoBufferedReader(read);intcount=0;Stringline=null;while((line=br.readLine())!=null){System.out.println(line);count++;}}}//quotation引号classMyQutoBufferedReaderextendsBufferedReader{publicMyQutoBufferedReader(Readerreader){super(reader);}publicStringreadLine()throwsIOException{Stringline=super.readLine();if(line!=null){return"\""+line+"\"";}else{returnnull;}}}既想要显示行号又想要显示引号

发现,就需要再定义子类,发现这样比较麻烦,代码臃肿.而且代码重复.

可以换一种方式.如下:

其实就是一个新类要对原有类进行功能增强.

1.在增强类中维护一个被增强的父类引用变量

2.在增强类的构造函数中初始化1中的变量

3.创建需要增强的方法,在刚方法中调用被被增强类的方法,并加以增强。

这就是装饰器模式

装饰器模式:

使用分层对象来动态透明的向单个对象中添加责任(功能)。

装饰器指定包装在最初的对象周围的所有对象都具有相同的基本接口。

某些对象是可装饰的,可以通过将其他类包装在这个可装饰对象的四周,来将功能分层。

装饰器必须具有和他所装饰的对象相同的接口。

JavaIO中的应用:

JavaI/O类库需要多种不同的功能组合,所以使用了装饰器模式。

FilterXxx类是JavaIO提供的装饰器基类,即我们要想实现一个新的装饰器,就要继承这些类。

装饰器与继承:

问题:

修饰模式做的增强功能按照继承的特点也是可以实现的,为什么还要提出修饰设计模式呢?

继承实现的增强类和修饰模式实现的增强类有何区别?

继承实现的增强类:

优点:代码结构清晰,而且实现简单

缺点:对于每一个的需要增强的类都要创建具体的子类来帮助其增强,这样会导致继承体系过于庞大。

修饰模式实现的增强类:

优点:内部可以通过多态技术对多个需要增强的类进行增强

缺点:需要内部通过多态技术维护需要增强的类的实例。进而使得代码稍微复杂。

THE END
1.装饰画搭配:点亮居家空间的艺术之光居家简约风格艺术装饰画装饰画,作为居家装饰的点睛之笔,不仅能够提升空间的美感,还能彰显主人的独特品味。在选择和搭配装饰画时,需要考虑的因素颇多。 首先,要根据空间的色调和风格来选择装饰画的风格。例如,简约风格的居室宜搭配线条简洁、色彩淡雅的装饰画,而复古风格的房间则更适合选择充满历史韵味的油画或版画。 打开网易新闻 查看精彩图片https://m.163.com/dy/article/JIOU49U505536U1C.html
2.世界装饰纹样图典:4000种装饰纹样大赏!法国第二帝国时期(1852—1870)巴黎的建筑热潮进一步加剧了人们对装饰纹样和相关书籍的需求,人们倾向于装饰任何可用的表面。 ▲19世纪印花织布装饰 法国民俗服装学者、纹饰专家、画家和插图画家阿尔贝·奥古斯特·拉西内耗时20年打造的精品巨著《世界装饰纹样图典》(原书名《多彩装饰》),成为了当时装饰纹样设计必备参考书。https://www.360doc.cn/article/57323898_1039179301.html
3.客厅摆设装饰品图片装信通网客厅摆设装饰品图片专区,收集整理精美的客厅摆设装饰品装修效果图,客厅摆设装饰品装修图片,客厅摆设装饰品设计效果图以及客厅摆设装饰品装修搭配方法供广大业主装修时参考,更多的客厅摆设装饰品图片尽在装信通网效果图栏目。https://m.zx123.cn/xiaoguotu/288661/
4.CAD装饰施工图中ch什么意思3d溜溜设计问答平台为广大设计师们提供各种CAD装饰施工图中ch什么意思问题解答,3d溜溜素材问答平台汇聚全球各地的设计师、名师名司、设计爱好者等设计灵感和经验,迅速为您解决CAD装饰施工图中ch什么意思的困惑。https://www.3d66.com/answers_relation/relation_2438033.html
5.光SCETCH图案万花筒抽象背景对称。装饰。照片摄图新视界提供光SCET CH图案万花筒抽象背景对称。 装饰。图片下载,另有摘要,年龄,古董,艺术形式,背景,背景,没事,卡,地毯,围圈,颜,封面,曲线,装饰,设计图片搜索供您浏览下载,每张图片均有版权可放心商用,您正在浏览的图片为18w6b1https://xsj.699pic.com/tupian/18w6b1.html
6.装饰图案小球圣诞双十二元素png图片免费下载素材chfedhi88ICON有海量装饰图案小球圣诞双十二元素素材:元素,双十二,图案,圣诞,小球,装饰等,你现在浏览的素材编号chfedhi,搜索免抠元素素材就来88ICON素材库!https://pub.88icon.com/sucai/chfedhi.html
7.CH8200AS产品相册攀枝花申丽装饰装修有限公司马可波罗瓷砖 CH8200AShttp://shop.jc001.cn/1810932/photo/4923436.html
8.君楷ch周边拟人贴纸国家countryhumans五常俄瓷美英法手账装饰手机君楷ch周边拟人贴纸 国家countryhumans五常俄瓷美英法手账装饰手机壳 国家拟人贴纸70枚图片、价格、品牌样样齐全!【京东正品行货,全国配送,心动不如行动,立即购买享受更多优惠哦!】https://item.jd.com/10094041370383.html
9.ch素材ch图片ch素材图片下载觅知网为您找到7240个原创ch素材图片,包括ch图片,ch素材,ch海报,ch背景,ch模板源文件下载服务,包含PSD、PNG、JPG、AI、CDR等格式素材,更多关于ch素材、图片、海报、背景、插画、配图、矢量、UI、PS、免抠,模板、艺术字、PPT、视频等设计素材就来觅知网。https://www.51miz.com/so-sucai/2521511.html
10.室内装饰上海图片,室内装饰上海图片大全马可波罗网室内装饰上海图片,包括室内装饰上海最新图片,室内装饰上海图片精选,室内装饰上海图片大全。查找室内装饰上海图片,了解相关产品信息,请上马可波罗网。https://m.makepolo.com/cpinfo/tupian/dx1870794.html
11.四维星软件官网装修设计软件装饰效果图软件四维星软件是专业的装修设计软件,装饰效果图软件,室内设计软件,可以在不同空间内随意更换窗帘墙纸等多种装修建材,使客户能直观看各建材实际效果及整个空间的装修搭配效果,方便了顾客选择,为装企和建材门店提高销售成交率!http://mm.4design.cn/
12.建筑工程常用装饰装修材料图册大全(29大类大量图片)陈伟39501198发表于2016-03-25总热度:4332浏览数:11053跟帖数:13荣誉分:0筑龙币:0等级:https://m.zhulong.com/bbs/postDetail?tid=21080482
13.基础地理信息数字成果1:5001:10001:2000数字正射影像图CH当当网图书频道在线销售正版《基础地理信息数字成果1:500、1:1000、1:2000数字正射影像图CH/T9008.3-2010》,作者:国家测绘局,出版社:测绘出版社。最新《基础地理信息数字成果1:500、1:1000、1:2000数字正射影像图CH/T9008.3-2010》简介、书评、试读、价格、图片等http://product.dangdang.com/20915365.html
14.设计灵感Vyvojá?ská spole?nost ?北京拓者装饰设计有限公司“ uvedla, ?e sou?ástí opat?ení na ochranu soukromí v této aplikaci me byt zpracování dat ní?e popsanymi zp?soby.Dal?í informace najdete vzásadách ochrany osobních údaj? poskytnutych vyvojá?https://apps.apple.com/cn/app/%E8%AE%BE%E8%AE%A1%E7%81%B5%E6%84%9F-%E5%AE%A4%E5%86%85%E8%AE%BE%E8%AE%A1%E8%A3%85%E4%BF%AE%E6%95%88%E6%9E%9C%E5%9B%BE%E5%BA%93/id1380638281?l=cs
15.天津市河西区大沽南路登发装饰城(河西店)位置示意图,地图位置为了帮助您更好地了解天津市河西区大沽南路登发装饰城(河西店)的详细情况及周边环境,城市吧提供丰富的相关信息,包括位置示意图、交通指引、词条、问答以及周边地址名录等,让您轻松规划行程。同时,携程旅行为您提供天津市河西区大沽南路登发装饰城(河西店)相关酒店预订服务,包括豪华酒店、精致客栈、舒适公寓、温馨民宿https://tj.city8.com/cater/8953ch8122esb34b63_address
16.60X60微孔扣板高清图片佛山市粤艺佰装饰建材有限公司 身份认证 600X600黑色铝扣板 60X60微孔扣板高清大图查看详情> 面议 查看联系方式 发联系信 < 上一条下一条 > 产品属性: 是否有现货:否|材料:铝合金|板面形式:0.7-1.2|表面涂层:喷粉|功能:防静电|厚度:0.5-1.2|类型:C型|品牌:粤艺佰|特性:吊顶|型号:600X600 https://cn.made-in-china.com/tupian/yybzsjf-uSaJosNEblcH.html
17.图重庆小四满一岁最后颠峰终极装饰完成海量图片长城M4论坛chxczhht2013/12/12 22:04:一键启动,牛,楼主你这不得花个一万两万的啊。太牛了。https://club.autohome.com.cn/bbs/thread/3ae6d4ca0d4ce7f4/25489533-18.html
18.装修2年半的房子,柜子里还是甲醛超标(有图片测试为证)时间轴为:图2、3、4、5、6、7、8、9 、10、1(也就是说第一张图拿去镇楼的,按照时间顺序是最后测的,其他图都是按时间顺序的) 补充查阅了资料:有些广告中竹炭对甲醛有很强的吸附能力,并宣称有实验佐证。可是这些实验条件不能不让人生疑,他们是把竹炭置于近乎饱和的甲醛蒸汽中,每克竹炭高达68毫克的甲醛吸附https://home.19lou.com/forum-72-thread-165451486606626842-1-1.html
19.向量例证.插画包括有夫妇,要素,装饰品,图标,查出,信函插画 关于 首字母签名徽标 手写徽标矢量模板 商业,美容,时尚,签名. 插画 包括有 夫妇, 要素, 装饰品 - 182102384https://cn.dreamstime.com/ch%E5%B8%A6%E5%9C%86%E5%9C%88%E7%9A%84%E5%88%9D%E5%A7%8B%E6%89%8B%E5%86%99%E5%BE%BD%E6%A0%87-%E9%A6%96%E5%AD%97%E6%AF%8D%E7%AD%BE%E5%90%8D%E5%BE%BD%E6%A0%87-%E6%89%8B%E5%86%99%E5%BE%BD%E6%A0%87-%E7%9F%A2%E9%87%8F%E6%A8%A1%E6%9D%BF-%E5%95%86%E4%B8%9A%EF%BC%8C%E7%BE%8E%E5%AE%B9%EF%BC%8C-%E6%97%B6%E5%B0%9A%EF%BC%8C%E7%AD%BE%E5%90%8D-image182102384
20.KWin(窗口管理器)右击窗口装饰(就是标题栏)或打开 系统设置 访问KWin 新的更容易的设置。在这你可以启用特效以便更有效的管理你的窗口。比如你能用窗口轮转(Present Windows)作为「窗口切换」的特效。不同于显示图标或是小的程序缩略图,他安排整理运行中的窗口在同一个网格内,然后你能快速的选择你要的那个窗口。只要使用Alt-Tab快https://userbase.kde.org/KWin/zh-cn
21.CSSMDN属性选择器css例子文章浏览阅读1.4k次,点赞23次,收藏9次。标签不区分大小写示例:1.1.2 通用选择器选择文档中所有内容,重置样式表中使用较多鉴于(代表所有的div元素,并且是第一个子)和(代表div的后代元素,并且是第一个子)容易混淆则使用代替后者类名区分大小写示例:定位特定元素的https://blog.csdn.net/daban2008/article/details/136182287
22.绿城建筑科技集团有限公司校园招聘南昌航空大学宣讲会2、有相关装饰行业类造价核算类实习经验者优先; 3、熟练掌握相关领域工程造价管理及制度,熟练运用成本造价等办公软件; 4、认同绿城文化,工程类相关岗位可依据项目要求进行区域调配。 投递说明: 登陆绿城中国官网,进入“绿城招聘-校园招聘-启航生”了解项目更多资讯并进行网申。网申地址为: https://xjh.haitou.cc/article/1166433.html
23.查标准上工标网工标网——最专业权威的标准门户网站。及时收录各行业标准,国家标准,国外标准等资讯、公告、及标准更替信息,与搜索完美结合,及时为企业提供各种标准化信息服务,并为用户提供最简单便捷的网上购买服务。查标准,上工标网。http://csres.com/