操作系统课上留的作业,终于完成一个了~应该说,基本完成,还是有点点瑕疵,等到上机的时候要修改一下~
其实听起来很简单,3个线程,一个从文件读数据,一个修改数据,一个将数据写到文件。但现在的我,对于io和thread的掌握还差很多,边学边做,浪费了一些时间,但收获也颇丰~
谈谈这次编成的收获:
1.API很重要,学会查API会有极大帮助
2.对于io有初步认识,了解了一些最基本的方法,但由于知道的API较少,有时候容易陷入迷惑~
3.对于线程,看了看Doug Lea的书,完全看不懂,有必要以后多看,线程是一把双刃剑,很有可能就用的不正确,但掌握之后,便是极其“爽”~尤其其同步问题,是一个很值得钻研的问题
---------------------------------------------------------------------------------------------
import java.io.*;
public class MainTest {
public static boolean life=true;
public static long length; //文件大小
public static byte[] buf; //缓冲区
public static int count=0; //缓冲区大小
public static void main(String[] args) throws IOException{
File input=new File("input.txt");
File output=new File("output.txt");
if(!input.exists()||!output.exists()){
System.out.println("Error!There is no file to input or output!");
}
else{
ReadT reader=new ReadT(input);
ModifyT modifyer=new ModifyT();
WriteT writer=new WriteT(output);
reader.start();
modifyer.start();
writer.start();
}
}
}
---------------------------------------------------------------------------------------------
/*
*ReadT类用来读取input文件中的数据
*/
import java.io.*;
public class ReadT extends Thread {
private int Flag=0; //用于判断是否已经读取完毕
private FileInputStream inputFile;
//构造函数,根据传进来的File对象建立输入流,并且将MainTest中的数据进行初始化
ReadT(File input){
//建立输入流,抛出异常
try{
inputFile=new FileInputStream(input);
}
catch(IOException e){
System.out.println(e);
System.exit(1);
}
MainTest.length=input.length(); //得到文件大小
//如果文件什么都没有,那么报错并退出程序
if(MainTest.length==0){
System.out.println("Nothing to do!");
System.exit(1);
}
MainTest.count=(int)MainTest.length/7; //建立缓冲区
MainTest.buf=new byte[MainTest.count];
}
public void run(){
try{
while((Flag=inputFile.read(MainTest.buf))!=-1){
System.out.println("ReadT");
this.yield();
}
MainTest.life=false;
System.out.println("ReadOver!");
inputFile.close();
}
catch(IOException e){
System.out.println(e);
System.exit(1);
}
}
}
---------------------------------------------------------------------------------------------
/*
*ModifyT用来修改文件,实现数据+1
*/
public class ModifyT extends Thread{
private Integer tempnumi;
private int temp;
private Byte tempnumb;
public void run(){
for(int i=0;i<MainTest.count;i++){
if(!MainTest.life) return;
/* tempnumb=new Byte(MainTest.buf[i]);
temp=tempnumb.intValue();
temp=temp+1;
tempnumi=new Integer(temp);
MainTest.buf[i]=tempnumi.byteValue(); */
System.out.println("ModifyT");
this.yield();
}
}
}
---------------------------------------------------------------------------------------------
/*
*WriteT类用来将修改后的文件写入output
*/
import java.io.*;
public class WriteT extends Thread{
private FileOutputStream outputFile;
WriteT(File output){
//建立输出流,抛出异常
try{
outputFile=new FileOutputStream(output);
}
catch(IOException e){
System.out.println(e);
System.exit(1);
}
}
public void run(){
try{
for(int i=0;i<MainTest.count;i++){
if(!MainTest.life) return;
outputFile.write(MainTest.buf);
System.out.println("WriteT");
this.yield();
}
outputFile.close();
}
catch(Exception e){
System.out.println(e);
System.exit(1);
}
}
}
---------------------------------------------------------------------------------------------
分享到:
相关推荐
很多初学煮都不知道怎么开始做单 片机,这个东西很简单,只要把把头文件做好,然后给于高低电平的一个值就能把LED点亮,这个适合刚学程序的的朋友
【标题】"Accp6.0 S1 JAVA 理解程序逻辑 第1章"涵盖了初学者在Java编程中理解程序逻辑的基础知识。这通常包括基本的编程概念、语法结构和控制流,这些都是构建任何程序的基础。在这个学习资料中,北大青鸟Accp6.0_S1...
hello world视频教程,希望能够学习者提供帮助,实现对Android基础知识的掌握与理解,为后续学习做好铺垫,实现Android知识的灵活运用
调度程序的初始化子程序会设置这个进程,使其成为第一个运行的进程。 7. **资源分配**:调度程序可能需要管理特定的系统资源,如内存、I/O设备等。初始化子程序会分配这些资源并准备好供调度程序使用。 8. **调试...
第一步,创建电商小程序模版框架。 要有一个微信公众号,没有的话先去申请,然后在公众号里关联小程序(当然小程序也是要申请账号的,如果没有帐号,在关联页面里面有申请按钮,通过这里的按钮申请下来的小程序自动...
电动机顺序控制程序的主要特点是:按下电动机1启动按钮时,电动机1启动并连续运转,并为电动机2启动做好准备;当按下电动机2启动按钮后,电动机2启动并连续运转;电动机1处于停止状态时,电动机2不能启动;按下停止...
"C#基础程序第一"这个标题表明我们即将探讨的是C#编程语言的基础概念和实践,适合那些刚开始接触这门语言的学习者。 在C#的学习过程中,首先要理解的是它的基本语法结构,包括变量声明、数据类型(如int、string、...
总之,"CEPARK USB学习板之实战第五个USB程序_假U盘"是一个极好的学习平台,它涵盖了USB设备驱动开发、文件系统和错误处理等多个关键知识点。通过完成这个项目,你将能够独立地创建自己的USB设备,这在物联网、...
要让第三方程序运行在自定义的控件中,我们需要捕获其创建的窗口句柄,并将其设置为我们程序的一个子窗口。 1. **窗口重定向**:这通常涉及到使用API函数,如`CreateProcess`或`ShellExecute`来启动第三方应用程序...
第一部分 综述 第一章 高质量软件开发之道 第二章 做好程序员 第三章 编程语言发展简史 第四章 C++面向对象程序设计方法概述 第二部分 C++/C编程规范 第五章 文件结构 第六章 程序的版式 第七章 命名规则 第八章 ...
1. BOOTLOADER源代码:这可能是BOOTLOADER的第一阶段和第二阶段的源代码,开发者可以通过阅读和修改这些代码来定制自己的BOOTLOADER,以适应特定的硬件平台和需求。 2. 编译工具链:为了构建BOOTLOADER,可能提供了...
"程序是每个编程语言初学者的第一步,它标志着编程之旅的开始。在这里,我们也将从创建这个简单的C#程序开始,逐步深入到C#与Halcon的集成应用。 C#是由微软开发的一种面向对象的编程语言,广泛应用于Windows应用...
本课件"计算机程序设计课件简单程序^"涵盖了几个关键章节,包括第9章的“用户建立的数据类型”,第10章的“文件”以及第3章的“简单程序”和第6章的“数组2”。这些章节的内容为我们提供了深入理解编程基础的宝贵...
总的来说,"Java Web程序设计任务教程"的第一章旨在建立一个坚实的基础,涵盖Java Web开发的基本元素,如Servlet、JSP和MVC模式。通过学习这个章节,你将能够构建简单的Web应用,并为进一步探索Java EE和现代Web开发...
3. 第1届河南省ACM竞赛_正式赛.doc:作为竞赛的起点,这一届的题目可能更加基础,旨在引导学生进入程序设计竞赛的世界。初学者可以从这些题目中学习基本的编程技巧和算法知识,如递归、贪心算法和基础数据结构的使用...
词法分析是编译器构造过程中的第一阶段,它将源代码分解成一个个有意义的符号,即标记(token),为后续的语法分析和语义分析提供输入。 词法分析程序的主要任务包括识别关键字、标识符、常量、运算符、分隔符等...
在这个"微信小程序-户外旅游小程序源码及项目截图"中,我们可以深入学习和理解如何利用微信小程序开发一款针对户外旅游行业的应用程序。 首先,我们要了解微信小程序的基础架构。它基于JavaScript,结合了WXML...
实际操作中要注意代码的结构清晰,合理地使用缩进和注释,以及对可能出现的异常情况做好处理准备,确保程序的鲁棒性。通过不断地练习和应用,可以提高对程序流程控制的判断能力,为编写出高效、可靠的程序打下坚实的...
解压缩后的文件名为“第五章”,可能包含了一系列的Python源代码文件(`.py`),每个文件对应一个编程题目的解决方案。通过阅读和分析这些代码,学生不仅可以看到正确实现的功能,还可以学习到良好的编程风格和最佳...