实验12:Java高级IO流程序设计

2024-05-21

实验12:Java高级IO流程序设计(共6篇)

篇1:实验12:Java高级IO流程序设计

作业要求:每个题保存为一个.java文件,保存在同一工程文件夹中,文件夹的名字为E:Java你的班级+姓名,例如:E:Java信息11张三。

注意:上交的程序包含程序的执行结果,以注释的形式附在程序后面。

实验六文件管理与I/O流

一、实验目的1.熟悉用文件File类创建、删除、查看文件或目录。

2.字节流、字符流、缓冲流、随机流等流式文件的创建,读写操作。

3.用字符流和缓冲流从键盘接受字符串的方法。

二、实验内容

1.先运行该程序。源文件是sy6_1.java。然后按【思考问题】分析程序。

import java.io.*;

public class sy6_1{

public static void main(String[] args)throws Exception

{

int x=0;

File Mypath;

Mypath=new File(“E:aaaa”);

if(!Mypath.exists())

{System.out.println(“创建新目录”);Mypath.mkdir();}

else System.out.println(“目录已存在”);

File Myfile1=new File(Mypath,“myfile1.txt”);

File Myfile2=new File(Mypath,“myfile2.txt”);

File Myfile3=new File(Mypath,“myfile3.txt”);

FileInputStream Fin=new FileInputStream(Myfile1);

FileOutputStream Fout=new FileOutputStream(Myfile1);

DataOutputStream Dout=new DataOutputStream(new FileOutputStream(Myfile2));

DataInputStream Din=new DataInputStream(new FileInputStream(Myfile2));

PrintWriter PWout=new PrintWriter(new FileWriter(Myfile3));

RandomAccessFile RAread=new RandomAccessFile(Myfile3,“r”);

String str;

int num1;

BufferedReader buf;//缓冲流

buf=new BufferedReader(new InputStreamReader(System.in));

System.out.print(“请输入一个小于255整型数:”);

while(!(str=buf.readLine()).equalsIgnoreCase(“q”))

{ System.out.print(“请输入另一个小于255整型数,按Q结束:”);

num1=Integer.parseInt(str);

Fout.write(num1);

}Fout.close();

System.out.println(“你刚输入的数据是:”);

while((x=Fin.read())!=-1)

{ System.out.println(x);

}Fin.close();

System.out.print(“请输入int范围内整型数:”);

while(!(str=buf.readLine()).equalsIgnoreCase(“q”))

{ System.out.print(“请输入另一个整型数,按Q结束:”);

num1=Integer.parseInt(str);

Dout.writeInt(num1);

}Dout.close();

int leng=Din.available()/4;

int xxx=0;

while(xxx

{ xxx++;

x=Din.readInt();

System.out.println(x);

} Din.close();

System.out.print(“请输入第一个字符串:”);

while((str=buf.readLine())!=null)

{ System.out.print(“请输入另一个字符串,按Ctrl+Z结束:”);

PWout.println(str);//写入myfile3.txt中

} PWout.close();

RAread.seek(0);

while(RAread.getFilePointer()

{System.out.println(RAread.readLine());//从myfile3.txt中一行一行读并输出在控制台上

} RAread.close();

System.out.println(“完成”);

}

}

【思考问题】

① 本程序共用到哪几种流式文件?都用于做什么?

答:基本输入输出流:System.in.输入(从键盘)

System.out.输出(显示器)

字节流类:FileOutputStream 文件输出

FileInputStream 文件输入

DataOutputStream数据输出

DataInputStream数据输入

字符流类:PrintWriter输入

缓冲文件流:BufferedReader

② 运行完程序后,请用“我的电脑”找到创建的文件,并分别打开文件看其内容,你

看到的是你输入的数据吗?

答:myfile1和myfile2中的数据非输入数据,myfile3中可以看见输入的数据。③ 将创建输入流对象Fin放在输出流Fout前,看发生什么?

④ 对第二种流式文件判断文件占用字节的长度用available()方法,而此处用int

leng=Din.available()/4;为什么除以4?

2.按照第1题的内容,修改程序要求每次重新运行不覆盖原内容,把所有其它流式文件全部改用随机流式文件来实现,新的数据填加在文件尾,然后读出校验。

import java.io.*;

public class sy6_2 {

public static void main(String[] args)throws Exception {

File Mypath;

Mypath = new File(“E:aaa”);

if(!Mypath.exists())

{System.out.println(“创建新目录”);Mypath.mkdir();}

else System.out.println(“目录已存在”);

File Myfile1 = new File(Mypath, “myfile1.txt”);

File Myfile2 = new File(Mypath, “myfile2.txt”);

File Myfile3 = new File(Mypath, “myfile3.txt”);

RandomAccessFile rf1 = new RandomAccessFile(Myfile1, “rw”);

RandomAccessFile rf2 = new RandomAccessFile(Myfile2, “rw”);

RandomAccessFile rf3 = new RandomAccessFile(Myfile3, “rw”);

String str;

int num1;

BufferedReader buf;//缓冲流

buf = new BufferedReader(new InputStreamReader(System.in));

System.out.print(“请输入一个小于255整型数:”);

rf1.seek(rf1.length());//指针移到文件尾进行写操作

while(!(str=buf.readLine()).equalsIgnoreCase(“q”))

{ System.out.print(“请输入另一个小于255整型数,按Q结束:”);num1=Integer.parseInt(str);

rf1.write(num1);//将整型数作为ascii码值所对应的字符写入myfile1.txt中}

rf1.seek(0);//指针移到文件头进行读操作

int x=0;

while((x=rf1.read())!=-1)

{

System.out.println(x);

} rf1.close();

System.out.print(“请输入int范围内整型数:”);

rf2.seek(rf2.length());

while(!(str = buf.readLine()).equalsIgnoreCase(“q”)){

System.out.print(“请输入另一个整型数,按Q结束:”);

num1 = Integer.parseInt(str);

rf2.writeInt(num1);

}

int x1 = 0;

for(int l = 0;l

{

rf2.seek(l*4);

x1 = rf2.readInt();

System.out.println(x1);

}

rf2.close();

System.out.print(“请输入第一个字符串:”);

rf3.seek(rf3.length());

while((str = buf.readLine())!= null){

System.out.println(“请输入另一个字符串,按Ctrl+Z结束:”);rf3.writeUTF(str);//写入myfile3.txt中

}

rf3.seek(0);

while(rf3.getFilePointer()< rf3.length()){

System.out.println(rf3.readUTF());//从myfile3.txt中读出字符串并输出在控制台上

}

rf3.close();

System.out.println(“完成”);

}

}

三、实验报告要求

1.回答第1题【思考问题】提出的问题。

2.写出第二题要求的源程序。

篇2:实验12:Java高级IO流程序设计

import java.io.*;

public class Io {

public void test1()throws Exception{

File file=new File(“E:/txt.txt”);

if(file.exists()){

System.out.println(“是否是文件:”+file.isFile());

System.out.println(“文件名是:”+file.getName());

System.out.println(“路径是:”+file.getPath());

System.out.println(“绝对路径是:”+file.getAbsolutePath());System.out.println(“上级目录是:”+file.getParent());System.out.println(“文件大小是:”+file.length()+“字节”);}

else {

file.createNewFile();

}

}

public void test2()throws Exception{//以字节流方式读取

File file=new File(“E:/txt1.txt”);

FileInputStream fi=new FileInputStream(file);

byte[] content= new byte[fi.available()];

/*for(int i=0;i

content[i]=(byte)fi.read();

}//读取长度后,将其转换成字符型

*///第一种方式

fi.read(content);//第二种方式

String str=new String(content);

System.out.println(str.trim());

}

public void test3()throws Exception{//以字节流方式写入数据

File file=new File(“E:/txt1.txt”);

FileOutputStream fo=new FileOutputStream(file);

byte[]content=new String(“你是一个”).getBytes();

fo.write(content);

content=new String(“呵呵”).getBytes();

fo.write(content);

fo.close();

}

public void test4()throws Exception{//用的缓冲方式文本读取

FileReader file=new FileReader(“E:/txt1.txt”);

BufferedReader br=new BufferedReader(file);

StringBuffer str=new StringBuffer();

String sw=br.readLine();

if(sw!=null){

str.append(sw+“ n”);

}

System.out.println(str);

}

public void test5()throws Exception{//用缓冲的方式写入数据然后再读入数据

FileWriter file=new FileWriter(“E:/txt1.txt”);

BufferedWriter bw=new BufferedWriter(file);

for(int i=1;i<=10;i++){

bw.write(“这是第”+i+“行”);

bw.newLine();

}

bw.close();//写放数据

FileReader file1=new FileReader(“E:/txt1.txt”);

BufferedReader br=new BufferedReader(file1);

StringBuffer str=new StringBuffer();

String sw=br.readLine();

if(sw!=null){

str.append(sw+“ n”);

}

System.out.println(str);

}

public void test6(){//删除文件

File file=new File(“E:/text.txt”);

if(file.exists()){

System.out.println(“开始删除文件 :”+file.getPath());if(file.delete()){

System.out.println(“文件删除成功”);

}

else {

System.out.println(“文件删除失败”);

}

}

else {

System.out.println(“该文件不存在”);

}

}

public void test7()throws Exception{//创建 一个文件夹---创建一个目录或路径

File file=new File(“E:/txt1.txt”);

if(file.exists()==false){

file.createNewFile();

}

}

public void test8()throws Exception {//* 将txt.txt复制文件到txt12.txt去;以字节流的的形式复制

File file=new File(“E:/txt.txt”);

FileInputStream fi=new FileInputStream(file);

byte[] content= new byte[fi.available()];

fi.read(content);

fi.read(content, 0, content.length);

String str=new String(content);

System.out.println(str);

File file1=new File(“E:/txt12.txt”);

if(file.exists()==false){

file.createNewFile();

}//如果不存在该文件则创建一件文件 再行进复制

FileOutputStream fo=new FileOutputStream(file1,true);fo.write(content);

fo.flush();

fo.close();

fi.close();//关闭流

}

public void test9()throws Exception {//另和种方式复制文件--从缓冲的形式复制

FileReader file=new FileReader(“E:/txt.txt”);

BufferedReader br=new BufferedReader(file);

String str=br.readLine();

//从文件 里面读取出来

FileWriter file1=new FileWriter(“E:/txt1.txt”);

BufferedWriter bw=new BufferedWriter(file1);

while(str!=null){

bw.write(str);

bw.newLine();

str = br.readLine();

}

bw.flush();

bw.close();

br.close();

}

public void test10()throws Exception{

File file=new File(“E:/txt.txt”);

InputStream is = new FileInputStream(file);

byte[] array = new byte[3];

int hasRead = 0;

File file1=new File(“E:/txt1.txt”);

OutputStream os = new FileOutputStream(file1);

while((hasRead=is.read(array, 0, array.length))!=-1)

{

System.out.println(“读取了”+hasRead+“个字节”);

for(int i=0;i

{

System.out.println(“第”+(i+1)+“个:”+array[i]);

}

/**每次从数组array里写入字节到文件 读多少写多少*/

os.write(array, 0, hasRead);

}

os.flush();

os.close();

is.close();

}

public static void main(String args[])throws Exception{

Io t=new Io();

t.test9();

}

篇3:实验12:Java高级IO流程序设计

1 市场调研

通过走访用人单位、问卷调查、资料收集与分析等手段, 组织教师对苏州地区事业单位和太仓软件园等相关行业和企业进行调查和分析。被调查单位一共有167家, 收回问卷160份, 其中有效问卷160份, 有效率达95.8%。调研的结论有三个。

1.1 IT企业需要两类人才:软件蓝领和项目开发人员。

软件蓝领的需求主要集中在日本、美国等加工软件的企业, 这类企业需要程序代码编写与测试人员。这类人才必须具有程序设计的基础知识, 如程序设计的基本语法、简单程序算法、可视化程序设计方法, 能根据软件程序设计说明书, 编写软件代码, 并进行软件测试, 写出测试报告, 了解软件开发的全过程等知识。

项目开发人员主要集中在一些中小软件公司, 这类企业需求项目开发人员, 从系统功能分析、数据分析直到软件程序编写, 均要自己完成。这类人员需要掌握系统的程序设计基础理论知识及实际项目开发知识。

1.2 企业需要的软件开发语言有两个方向:java方向和.net方向。

Java代表开源软件方向。它更适合于企业级的框架开发, 像目前比较成熟的J2EE框架, 以及兼容在这上面的一系列比较成熟的平台, 同时由于Java自身利用了JVM技术的特质, 它具有了一次编译, 到处运行的特点, Java程序可以在包括windows, Linux等各种不同平台上运行, 应该说Java代表了非微软的一大开发阵营。而且由于其开源的特质, 让越来越多人享受到了参与开源的乐趣。

.NET是微软主推的开发平台, 它的应用也十分广泛, 包括WPF等新技术目前也越来越得到开发界的热爱, 同时由于其良好的利用了Visual Studio的IDE, 让开发人员可以快速上手进行开发, 同时丰富的控件库也是VS的一大特性。

相比而言, Java/J2EE的就业市场一直都是IT业中需求最热、职位最多, 而且整体薪资水准较高。同时Java在各行业的应用前景也比.net突出, 特别是在苏州地区, Java编程人员的需求量与日俱增, 出现了供不应求的现象。

另外2007年我院成立了健雄-思维力服务外包培训基地。该基地立足IT实训, 以促进软件产业发展为方向, 目前主要培养以Java语言做软件研发主流工具的程序员。

根据以上的调查研究, 我们把软件专业主干课程定位在java方向, 开设一系列java课程。包括《java程序设计》、《JSP》、《sql server数据库》等课程。

1.3 学校教育与企业需求之间有矛盾。

IT是技术应用性很强的行业, 而且技术发展很快, 而学校的教育相对稳定, 偏重理论基础知识的教学, 这样毕业生在基础知识方面挺扎实, 但是学到的技术技能过于滞后, 实践应用中还需要进行较长时间的再培养。

2 项目化教学改革实践

为了让高职学生迅速成为企业需要的java软件蓝领和java项目开发人员, 我们采用项目化的教学方法。以"项目技能"为核心, 凸显"实用"导向。注重训练学生能解决什么实际问题、完成什么实际任务, 而不是传统教学的懂什么概念、了解什么知识;因此, 从一开始, 课程内容的设计和安排依据就是实际项目中所需要掌握的技能。其基本思路是根据课程的内容和认知目标, 打破课本原有的顺序, 按照探索性学习的需要, 把课程综合、细化成若干可操作的程序设计项目, 然后以具体项目为先导开展教学。在具体实施时, 遵循先学会如何做, 再学会为什么这样做, 让学生从做中学。项目化教学从制定课程标准开始。

2.1 制定课程标准

确立以学生为主体, 教师为主导, 以培养职业能力为主线, 以项目为载体, 以任务为驱动, 建立以工作过程为导向的课程开发理念。以《java程序设计》课为例。首先制定出本课程将要学习的15个项目, 具体项目如下:JAVA开发环境;数据转换器;成绩评判器;找素数;数据排队;时间提取机;复数类;小店库存统计;目录的树状展示;人数统计的异常捕获;进制转化机;多彩的图象;文本保存器;银行转帐业务;学籍管理系统

2.2 java语言与软件工程融合的项目化教学

正是由于社会需要的人才是软件蓝领和项目开发人员。我们在教学中按照项目化教学模式来组织教学, 将软件工程的知识与java语言融入到贯穿始终的项目之中, 收到很好的教学效果。使学生通过实战, 亲身感受软件项目开发的全过程, 更加有效地培养软件项目工程实践能力, 为将来从事软件开发打下坚实的基础。以《学生学籍管理系统》为例说明如何通过项目化的教学融合软件工程知识培养学生工程实践能力。

进行需求分析。在进入正式开发之前, 必须先从用户处获取准确的需求。要求学生先向班主任了解目前的学籍管理情况。并由任课教师和学生共同提出界面、功能要求, 要求学生写出《系统目标说明书》。

进行可行性研究。根据学籍系统应实现的主要功能, 例如:学生信息查询、学生信息录入、学生信息修改、学生信息删除等, 要求学生分组讨论系统的可行性、写出《可行性论证报告》并提交。教师先充当分析员的角色在课上分析报告, 估计系统的成本和效益, 并且在此基础上更准确, 更具体地确定工程规模和目标。

进行结构化分析。要求学生按学籍管理系统的详细工作流程, 运用数据流图, 数据字典和简要的算法等工具, 导出目标系统的逻辑模型, 写出《需求规格说明书》。这个阶段的任务仍然不是具体地解决问题, 而是准确地确定, 为了解决这个问题, 目标系统必须做什么, 主要是确定目标系统必须具备哪些功能。学生系统分析员 (学生) 在这个阶段必须与用户 (老师) 密切配合, 充分交流信息, 以得出经过用户 (老师) 确认的系统逻辑模型。

进行总体设计。在充分权衡各种方案的利弊的基础上, 拿出一个最佳方案后就是设计软件的结构, 也就是确定程序由哪些模块组成以及模块间的结构, 画出软件结构图, 并设计数据的逻辑结构。教师将目标系统的逻辑模型映射为软件初始结构。之后, 要求学生再对软件结构进行修改和优化, 提交《概要设计说明书》。

进行详细设计。根据上一步软件结构图, 详细设计其中的每个模块, 并对数据的物理结构进行设计, 将数据分配到各个模块, 并提交《详细规格说明书》。

进行编码。用JAVA语言正确地描绘出符合用户要求的代码。

进行测试。要求通过测试使系统达到预定的要求, 可以对学籍管理中的部分模块精心设计一批测试用例, 进行单元测试, 再进行集成测试和验收测试, 系统地找出程序中潜在的各种错误和缺陷。

运行维护。把成品程序发给用户 (老师们) 进行试用。让学生理解软件的环境的可变, 以便进行适应性维护, 并对软件在运行过程中出现错误进行维护。

总结

学生通过参与一个个真实的项目的"实战演习", 了解了软件开发的思路, 并学会用计算机语言实现具体的编程。学生在完成项目后纷纷感到:项目化的教学强调培养整体素质, 不是为了学习语言而学习语言, 而是在项目的实践中自然地对语言语法结构融会贯通。项目化教学解决目前职业教育中存在的理论与实践脱节的问题, 从而提高教学质量, 实现教学内容和企业需求的最佳结合。

摘要:文章从市场调查及企业对软件开发人才及平台的需求出发, 阐述了高职的计算机高级语言采用宜采用项目化教学方法培养企业所需软件人才, 并以《java程序设计》为例, 进行了大胆教学改革实践。

关键词:java语言,项目化教学,软件蓝领, 项目开发

参考文献

[1]戴士弘.职业教育课程教学改革[M].清华大学出版社2008, 11.

[2]陈肖生.白云职院计算机软件专业项目式教学模式探索.职业技术教育, 2005, (22) :76-77.

篇4:实验12:Java高级IO流程序设计

Java程序设计教学也引起了高校的高度重视。可视化编程以“所见即所得”的编程思想为原则,不仅应用起来较为方便,而且还能够取得良好的教学效果。本文首先对Java教学平台进行介绍,并在此基础上探讨基于Eclipse和Visual Editor的Java可视化程序设计教学,以及来为今后计算机教学质量的提升提供一定的参考依据。

关键词:可视化实验平台Java程序设计教学应用

Java程序设计教学作为高校计算机教学中的一项重要内容,如何提高其教学质量已经成为了诸多高校计算机教师所面临的一项重大课题。就当前Java程序设计教学的现状来看,最重要的两项内容便是基于图形用户界面的应用程序和网络程序设计,这使得可视化开发环境的合理利用成为了教学过程中的一个必然趋势,对教学质量的提升具有重要意义。

1 Java教学平台

基于图形用户界面的应用程序和网络程序设计作为Java程序设计教学中的两项重要内容,在实际教学过程中,不仅需要对设计过程中涉及到的组件外观进行反复修改,而且还要根据实际应用情况对布局进行合理安排,为了能够更好的完成教学任务,将可视化实验平台充分利用起来是不容忽视的,可视化实验平台不仅应用起来极为方便,而且具有“所见即所得”的特点,能够将复杂的知识简单化,激发学生对学习的积极性和主动性。与此同时,在教学中充分融入Java集成开发平台,还能够让学生更好的对所学知识进行掌握。

就目前Java教学软件平台的实际应用来看,其主要涉及了JDK、JBuilder以及NetBeans等软件。Eclipse是一款开源的Java IDE,具有免安装、所耗空间少的特点,正因为如此,Eclipse目前已经成为了Java行业中的主流IDE。

2 可视化实验平台在高校Java程序设计教学中的应用

2.1 Visual Editor

在Eclipse中,我们可以将可视化插件Visual Editor建立的Java GUI开发环境融入其中,Visual Editor作为Eclipse的构件,不仅能够对Java的相关组件和模式提供支持,而且还可以充分实现跨平台的网络程序,使整个系统更加科学、完善。

由于Visual Editor对GUI开发的支持是建立在图形化编辑框架基础上的,而GEF使用了Eclipse建模框架,因此在使用Visual Editor的时候,不但需要添加Visual Editor,而且还要在此基础上同时添加GEF和EMF两个插件。除此之外,如果是汉化的Eclipse,那么还应该在此基础上添加Eclipse的多国语言包,以此来确保系统能够正常运行。

2.2 教学软件环境设置

不同教学目标对教学软件环境的设置要求也不尽相同,教师可以根据教学的实际需求,对教学软件环境进行合理设置。一般来说,在下载完Eclipse和各类插件之后,可以在此基础上配置JDK和安装Eclipse插件。总的来说,在对教学软件环境进行设置的过程中,首先要完成JDK配置,系统在安装JDK之后,整个系统的path变量值也会发生变化,即在原有基础上,增添了与JDK相对应的tools.jar和dt.jar的文件路径。其次是Eclipse安装,该环节的实现仅需将压缩包进行正常解压即可。最后是插件安装,在系统所涉及的语言中,无论是Visual Editor、EMF,还是多国语言包插件的选用,均可实现插件免安装。但需要注意的是,在对所使用的语言进行解压之后,应该将其插件的联合文件在Eclipse中添加。检查插件是否安装成功,其主要方法为在将Eclipse重启之后,查看界面中菜单的显示情况,如果为汉字显示,则说明安装成功。反之,则说明安装不成功,应重新进行安装。

3 教学效果

根据以上内容的分析与介绍,在Java程序设计教学中合理的加入了可视化实验平台,并按照文中所介绍的方式对教学软件环境进行了合理设置。在经过一段时间的教学之后,通过对教学效果的评价与分析我们能够看出,在使用了可视化实验平台进行教学之后,不仅提高了学生对学习的积极性和主动性,而且对知识的掌握也十分扎实。与此同时,由于可视化实验平台能够将复杂的问题简单化,因此,课堂上所讲的知识更加容易被学生理解和接受,学习起来也十分方便,从根本上提高了教学的根本质量。

4 结语

综上所述,在高校Java程序设计教学中将可视化实验平台充分利用起来,不仅能够激发学生对计算机知识学习的积极性和主动性,帮助学生更好的对所学知识进行了解和掌握,而且还能够使复杂的教学内容简单化,使教学起到事半功倍的效果。因此,在未来的时间里,高校计算机教师必须对可视化实验平台有一个全面系统的认识,并结合教学内容将其有效融入到Java程序设计教学中,以此来从根本上提高教学质量。

参考文献:

[1]袁小华,王令群,张书台.可视化实验平台在高校Java程序设计教学中的应用[J].计算机教育,2012(02).

[2]朱正强,吴介一,张竞飞,易红.基于VRML-Java的虚拟现

实技术在可视化装配中的应用[J].东南大学学报:自然科学版,2002(01).

[3]王永,林茂.基于JBuilder的Java辅助教学系统设计[J].科技信息,2008(20).

作者简介:

篇5:实验12:Java高级IO流程序设计

输入流(InputStream/Reader),输出流(OutputStream/Writer)

字节流(InputStream,OutputStream)字符流(Reader/Writer)

节点流(InputStream/Reader,OutputStream/Writer),处理流(过滤流)BufferedIO(缓冲),DataInputStream/DataOutputStream(各种数据类型), InputStreamReader/OutputStreamWriter(转换流),ByteArrayInputStream/ ByteArrayOutputStream(内存数组流)PipedInputStream/ PipedOutputStream(管道流,线程间通讯)

1.或者OutputStream可以创建一个文件,但是不能创建一个文件夹。

2.InputStream(OutputStream)和Reader(Writer)的区别在于字节和字符,对于非标准ASCII

编码(占用两个字节的字符)字节流会出现乱码。

3.使用bufferedIO是为了readline()方法和write(s),s是一个字符串。而且

bufferedinPutStream有mark和reset方法。

4.InputStreamReader和OutputStreamWriter可以把字节流转换为字符流。

InputStreamReader需要和InputStream套接。OutputStreamWriter需要和OutputStream套接。OutputStreamWriter可以写一个字符串。还有一个典型的应用就是在于对于System.in的处理。

InputStreamReaderisr =

newInputStreamReader(System.in);

BufferedReaderbr = newBufferedReader(isr);

System.in是一个InputStream的子类,需要把它改成InputStreamReader然后使用BufferedReader读出每行的内容。

5.DataInputStream,DataOutputStream是用来对付原始的数据类型,比如int,long,double,float 和UTF。

6.ByteArrayInputStream和ByteArrayOutputStream在内存中创建一个字节数组。

import java.io.*;

publicclassTestDataStream {

publicstaticvoid main(String[] args){

ByteArrayOutputStreambaos =

newByteArrayOutputStream();//在内存中创建了一个内存字节数组,并对上一个管道baos DataOutputStream dos =

newDataOutputStream(baos);//使用DataOutputStream是为了使用writeDouble,writeBoolean等方法

try {

dos.writeDouble(Math.random());//在字节数组当中写入8个字节的double类型的数字 dos.writeBoolean(true);//在字节数组中写入一个boolean类型的true,占用1个字节

ByteArrayInputStreambais =

newByteArrayInputStream(baos.toByteArray());//bais也对到由baos对应的内存字节数组

System.out.println(bais.available());//内存数组当中有多少字节可用(也就是说被写入了多少个字节的内容)

DataInputStream dis = newDataInputStream(bais);//使用DataInputStream是为了使用readDouble,readBoolean等方法

System.out.println(dis.readDouble());//先写进去的东西要先读是队列

System.out.println(dis.readBoolean());//后写进去的东西要后读

dos.close();

dis.close();

} catch(IOException e){

e.printStackTrace();

}

}

}

7.PipedInputStream和PipedOutputStream是管道流,用于线程间的通信。一个线程的PipedInputStream对象必须从另一个线程的PipedOutputStream对象读取输入。要使用管道流,必须同时构造管道输入流和输出流。

8.Print流就只有输出流,没有输入流。

Print流不会抛异常,而且都会自动flush。

System.setOut(ps);//修改系统输出的位置

9.Object流和序列化问题

将对象转换为字节流并保存起来(文件,磁盘,网络),这种机制叫做对象序列化。并在日后还原这个对象,这种机制叫对象的反序列化。将一个对象保存到永久存储设备上称为持续性。

使用ObjectOutputStream和ObjectInputStream来专门用来把一个object写入或者读出硬盘上。(常用于游戏存盘?)其做法是把整个的object写入磁盘或者读出。

当一个对象被序列化时,只保存对象的非静态成员变量,不能保存任何的成员方法和静态的成员变量。如果一个对象的成员变量是一个对象,那么这个对象的数据成员也会被保存。

为了把一个类的对象写到硬盘或者网络,就必须实现serializable接口或Externalizable接口。区别是在于和Externalizable(外部化)是接口是抽象方法,必须被实现。而Serializable(序列化)是一个标示形接口,也就是说,这样的接口是没有方法。Java当中还有很多这样的接口。但是我们必须实现这个接口,这个接口的意义是在于让java编译器知道这个该类需要实现了这个功能。要注意,如果该类没有实现这个接口,会抛出一个NotSerializableException。

有的时候,一个可序列化的对象包含对某个不可序列化的对象的引用,那么整个序列化操作将会失败,并且会抛出一个NotSerializableException。为了解决这个问题,可以将这个引用标记为transient,那么对象仍然可以序列化。也就是说,transient修饰的成员变量在序列化的时候,是不给予考虑的,也就是说被transient修饰的内容是不会被保存的。

篇6:实验12:Java高级IO流程序设计

日前, Fusion-io使用SIGGRAPH展示了其在视觉特效制作中数据传输上的最新突破。在目前的Fusion-io VFX传输路径中, 数据总量为192TB, 因为混合存储系统中老式的机械磁盘的缘故, 一开始如此多的数据移动相当缓慢, 但通过Infini Band网络, 与设备齐全的io FX工作站直连的io Turbine缓存系统可以很快地提升传输速度。Autodesk 3ds Max、玛雅、Mudbox、Adobe Creative云, Tweak RV和Assimilate Scratch都在使用该解决方案。

真正的故事始于四月, Fusion-io支付了1.19亿美元收购了Nex Gen公司。Nex Gen是一家“混合”存储系统制造商, 将超快速的Fusion io Memory技术用于价格更便宜的磁盘存储中。Fusion-io将Next Gen更名为io Control, 结果是可以达到类似于全闪存储服务器的吞吐量, 而且无需高昂的成本。

在SIGGRAPH, Fusion-io展示了一个io Control混合存储系统, 配置48TB磁盘存储 (容量可扩展到192TB) , 同时运行两个服务器, 使用闪存进行读写操作。每个io Drive可实现1.5 GB/秒的读写速度, 只要在一个阵列中安装两个io Drive, 即实现3GB/秒读取速度, 使用户能够以该速度通过4个10Gig E端口写入到存储 (第一次从系统中读取数据时速度比较慢———数据从磁盘传输到闪存内, 那么数据即可实现全速读取) 。

是不是还觉得不够快?那么下一步可以使用io Turbine缓存系统, 该系统包括HP Z820工作站 (运行Windows Server2012 R2操作系统) 、两个CUBIX Xpanders (作为PCIe扩展器) 和8个3.2TB的io Scale卡。根据Fusion-io视觉计算主管Vincent Brisebois表示, io Turbine软件可缓存高达24TB的io Control系统 (在io Scale内存上) 数据。io Scale闪存可以实现一个接近12 GB/秒的整合吞吐量–这足够满足12个压缩的4K影片流或8个未压缩的4K影片流的需求。艺术家工作站 (更多HP Z820s工作站, 每个Z820上安装一个1.6TB io FX卡) 可通过Mellanox Technologies Connect X-Infina Band主机通道适配器连接到io Turbine系统进行工作。

上一篇:师德师风座谈会教师的发言稿下一篇:七月份科研工作总结