I/O系统 (输入/输出)

I/O系统

1:流:

(1)判断到底是输入,还是输出;永远站在程序的立场上;

(2)判断传递的到底是字节还是字符,从而决定管道的粗细;

字节管道可以传递所有数据,字符管道专门用来传递文本数据(1个字符等于2个字节)

2:java流四大父类:

  流的分类:字符流;字节流(对象流)

    字节流(用于输出文件、影音等存储较大的输出方式“2进制输出全类型”,尽量不传输文本文件,):

      InputStream(输入)确定输入是字节管道,InputStream子类前面的单词作为节点(File:是文件的意思,作为数据源输出),通过查阅API文档;

      OutputStream(输出)确定输入是字节管道,OutputStream子类前面的单词作为节点(File:是文件的意思,作为数据源输入),通过查阅API文档;

    字符流(用于输出文本文件等存储较小的输出方式):

      Reader(输入)

       Writer(输出)

    输入流与输出流

      输入:InputStream、Reader

    输出:OutputStream、Writer

    提供父类,为所有的子类提供方法

  只要输入输出,就会伴随异常出现,不能直接new,先等于null在new出管道,确定两端的管道,确定后先做关闭管道(养成习惯),

  流的方向:

public static void main(String [] args){

//文件的拷贝,这是可能在面试中出现的手工书写代码!

//功能:将D:/test.avi 拷贝到F:/wudi.avi

//    只要输入输出都有可能有编译时异常

FileInputStream fis = null;

FileOutputStream fos = null;

try{

//1.建立管道

fis = new FileInputStream( “D:/test.avi”);

fos = new FileInputStream( “F:/wudi.avi”);

//2、操作管道

  //方法一:输出时间过久

int b =0;//明明是读一个字节,为什么要用一个int来接?

while((b = fis.read() )!=-1){

fos.write(b);

}

  // 方法二:会使输出文件字节变大

byte[] b = new byte [1024];//[1024]可增大,加大输出,但范围尽量不要超过兆级!(通过生产测试机上测试确定)

//1Byte = 8bit;      1KB = 1024B;  1MB = 1024KB;

int length = 0;//记录读取了多少个有效字节数

while((length = fis.read(b))!= -1){ //-1判断是否读到文件末尾

fos.write(b,0,length);

fos.fiush();//强制刷出缓冲区的内容

}

} catch(FileNotFoundException e){

e.printStackTrace

} catch(IOException e){

e.printStackTrace

} finally{

//3.关闭管道

if(fis != null){

fis.close();

} catch(IOException e){

e.printStackTrace

}

}

if(fos != null){

try{

fos.close();

} catch(IOException e){

e.printStackTrace

}

}

3:对象的序列化/反序列化

  (学习分布式应用的基础“跨文件操作”):

  序列化:将内存当中的对象以二进制流的形式输出;

  反序列化:将输入的二进制对象流转换为内存中的一个对象;(第二种产生对象的方式:反序列化;“第一种:new;”)

   “强调将对象以二进制形式输出,但没有确定输出到什么地方”

(接口章节)标示接口“Serializable”:允许实现他的类进行某项操作;往往不具备任何方法;

    应该实现Serializable 接口

  管道的对接:对象

Serializable——可序列化接口

  javaBean规范中的第三项:应该实现Serializable接口!

让StudentBean implements Serializable(io中)每个类的每次编译都应该重新生成;

使用transient关键字修饰的属性,其值不参与序列化;

public static void main (String [] args){

//对象序列化——将对象以二进制流的形式输出;

StudentBean sb = new StudentBean(“zhang3”,24,true);

ObjectOutputStream  oos = null;

//  FileOutputStream  fos = null;

try{

oos = new ObjectOutputStream(new FileOutputStream (“student.data”));//不用关闭管道;

oos.writeObject(sb)

//      fos = new FileOutputStream (“student.data”); // (“student.data”)  文件的相对路径;

//     oos = new ObjectOutputStream(fos);

} catch(FileNotFoundException e){

e.printStackTrace

} catch(IOException e){

e.printStackTrace

} finally{

if(oos != null){

oos.close();

} catch(IOException e){

e.printStackTrace

}

}

//对象反序列化——将输入的二机制流转换为内存中的对象

///反序列化是Java中第二种产生对象的方式

StudentBean sb = null;

ObjectInputStream ois = null;

try{

ois = new ObjectInputStream (new FileInputStream (“student.data”));

sb = (StudentBean)ois.readObject();

} catch(FileNotFoundException e){

e.printStackTrace

} catch(IOException e){

e.printStackTrace

} finally{

if(ois != null){

ois.close();

} catch(IOException e){

e.printStackTrace

}

}

System.out.println(sb.getName);

}

file类(文件类):

可以表示文件或文件夹(文件夹也是文件的一种)

public static void main(String[]   args){

//file类——来表示操作系统的文件或文件夹对象

File file = new File(“F:/wudi.avi”);

File dir = new File(“F:/ppt”);

//作为文件对象的常用方法

String path1 = file.getAbsolutePath();//获取绝对路径

Stringpath2 =file.getPath();//获取相对路径

long space =file.length();//获取文件大小

long time = file.lastModified();//最后修改时间

System.out.println(path);

  System.out.println(space);

System.out.println(new Date(time));

  System.out.println(file.isHidden());//是否是隐藏文件

  System.out.println(file.isFile());//是否是文件(true是,flo否)

  System.out.println(dir.isDirectory());//是否是文件夹

  //文件分隔符(File.pathSeparator)

  String path = “D:”+File.pathSeparator + ”ffdfd” + File.pathSeparator +”ffafa”;

  path = "D:" + System.getProperty("file.separator") + "fdfddfd" + System.getProperty("file.separator") + "fdfdfd";

  System.out.println(path);

//作为文件夹对象的常用方法

  System.out.println("***************************************");//分割

String[] subFileNames = dir.list();//的到文件夹下面的所有子文件或子文件夹的名字

for(String subFileName : subFileNames){

System.out.ptintln(subFileName());

}

File[]subFiles = dir.listFiles();//的到文件夹下面的所有子文件或文件夹的File对象

for(File subFile : subFiles){

System.out.ptintln(subFile.getName());

}

System.out.println("***************************************");//分割

// 面试体:给任意一个文件夹,打印出该文件夹下面所有的子文件的名字(无论有多少层)“使用递归”

String inputDir = JOptionPane. showInputDialog(“请输入的不是一个文件夹。”);

showAllSubFile(new File(inputDir));

public static void showAllSubFile(File die){

if(dir.isDirectory()){

File[] subFiles = dir.listFiles();

for(File subFile : subFiles){

if(subFile.isDirectory()){

showAllSubFile(subFile);

}else {

System.out.println(subFile.getAbsolutePath());

}

}

}else{

JOptionPane.showMessageDialog(null,“您输入的不是一个文件夹。”);

}

}

}

时间: 2024-08-05 11:34:49

I/O系统 (输入/输出)的相关文章

计算机系统结构 输入/输出系统

一.I/O系统的可靠性.可用性和可信性 系统的可靠性是指系统从某个初始参考点开始一直连续提供服务的能力,通常用平均无故障时间(MTTF)来衡量, MTTF的倒数就是系统的失效率. 如果系统中每个模块的生存期服从指数分布,则系统整体的失效率是各部件的失效率之和. 系统中断服务的时间用平均修复时间(MTTR)来衡量. 系统的可用性是指系统正常工作的时间在连续两次正常服务间隔时间中所占的比例. 其中MTTF+MTTR通常用平均失效间隔时间(MTBF)来替换. 系统的可信性是指服务的质量. 二.RAID

【计算机组成原理】 输入/输出系统

I/O 系统基本概念 I/O 系统中的几个基本概念如下: 外部设备.包括输入/输出设备及通过输入.输出接口才能访问的外存储结构. 接口.在各个外设与主机之间传输数据时进行各种协调工作的逻辑部件.协调包括传输过程中速度的匹配.电平和格式转换等. 输入设备,用于向计算机系统输入命令和文本.数据等信息的部件.键盘和鼠标是最基本的输入设备. 输出设备.用于将计算机系统中的信息输出到计算机外部进行显示.交换等的部件.显示器和打印机是最基本的输出设备. 外存设备.指除计算机内存及 CPU 缓存等外的存储器.

java I/O系统(输入输出流)

java I/O系统(输入输出流) 流的特性1.含有流质(数据)2.它有方向(读或写) 流的分类: 输入流和输出流 输入流:io包中的输入流继承自抽象类InputStream或Reader 输出流:io包中的输入流继承自抽象类OutputStream或Writer 字节流和字符流 注:1字节代表1个英文单词存储的数据大小,一个汉字占两字节 1.字节流:以byte为最小单位传送,继承自抽象类InputStream或OutputStream,用于处理二进制文件,InputStream为读取字节流的父

0X04 字符串和格式化输入/输出

字符串(character string)就是一个或多个字符的序列.如:"hello world",双引号不是字符串的一部分,而是通知编译器,这是一个字符串. C没有为字符串定义专门的变量类型,而是把它存储在一个char数组中.该数组的单元数必须要比字符数多1,因为字符串在数组的最后一个位置会有\0. 在printf中用%s表示打印一个字符串. strlen()函数,以字符为单位给出字符串的长度.需要使用string.h头文件,该头文件中包含许多与字符串相关的函数原型. sizeof:

Java复习--IO(输入/输出){Java NIO}

http://my.oschina.net/u/2263278/blog/508770中介绍的BufferedReader时提到它的一个特征----当BufferedReader读取输入流中的数据时,如果没有读到有效数据,程序将在此处阻塞该线程的执行(使用InputStream的read()方法从流中读取数据时,如果数据源中没有数据,它也会阻塞该线程),也就是前面介绍的输入流.输出流都是阻塞式的输入.输出.传统的输入流.输出流都是通过字节的移动来处理的,即使我们不直接去处理字节流,但底层的实现还

第15章.输入/输出

File类: 访问文件和目录: File类可以使用文件路径字符串来创建File实例,该文件路径字符串既可以是绝对路径,也可以是相对路径.默认情况下,系统总是依据用户的工作路径来解释相对路径,这 个路径由系统属性"user.dir"指定,通常也就是运行Java虚拟机时所在的路径. File类提供了很多方法来操作文件和目录: 访问文件名相关的方法: 1.String getName():返回此File对象所表示的文件名或路径名(若是路径,则返回最后一级子路径名). 2.String get

python基础(文件输入/输出 内建类型 字典操作使用方法)

本文主要介绍了python基础入门,包括文件输入/输出.内建类型.字典操作等使用方法 一.变量和表达式 代码如下: >>> 1 + 1 2>>> print 'hello world' hello world>>> x = 1               >>> y = 2>>> x + y3 Python是强类型语言,无法根据上下文自动解析转换成合适的类型. Python是一种动态语言,在程序运行过程中,同一个变量

Java 输入/输出 反射

Java  输入/输出   反射 输入输出和反射 一.数据流的基本概念 流一般分为 ( Input Stream ) 和输出流 ( Output Stream ) 两类,但这种划分并不是绝对的.比如一个文件,当向其中写数 据时,它就是一个输出流:当从其中读取数据时,它就是一个输 入流.当然,键盘只是一个数人流,而屏幕则只是一个输出流. java 的标准数据流: 标准输入输出指在字符方式下 (如 DOS ) , 程序与系统进行交互的方式,分为三种: 标准输入 studin, 对象是键盘. 标准输出

多路复用输入/输出 ---- select

一.select 系统提供select函数来实现多路复用输入/输出模型.select系统调用是用来让我们的程序监视多个文件句柄的状态变化的.程序会停在select这里阻塞等待,直到被监视的文件句柄有一个或多个发生了状态改变. 文件句柄,其实就是一个整数,我们最熟悉的句柄是0.1.2三个,0:标准输入,1:标准输出,2:标准错误输出.0.1.2是整数表示的,对应的FILE *结构:stdin.stdout.stderr. 二.select 相关 1.select函数  //一次可等待多个描述符 #

NIO入门系列之第一章:输入/输出:概念性描述

第1章 输入/输出:概念性描述 1.1  I/O 简介 I/O 或者输入/输出指的是计算机与外部世界或者一个程序与计算机的其余部分的之间的接口.它对于任何计算机系统都非常关键,因而所有 I/O 的主体实际上是内置在操作系统中的.单独的程序一般是让系统为它们完成大部分的工作. 在 Java 编程中,直到最近一直使用流的方式完成 I/O.所有 I/O 都被视为单个的字节的移动,通过一个称为 Stream 的对象一次移动一个字节.流 I/O 用于与外部世界接触.它也在内部使用,用于将对象转换为字节,然