输入输出流

合集下载

C语言中的输入输出流及其应用

C语言中的输入输出流及其应用

C语言中的输入输出流及其应用C语言是一种广泛应用于软件开发领域的编程语言,其提供了丰富的输入输出(I/O)函数和流(stream)的概念,以帮助开发者实现与用户或环境的交互。

本文将详细介绍C语言中的输入输出流及其应用。

一、输入流输入流用于接收外部数据供程序使用。

C语言提供了丰富的输入函数,包括:1. scanf函数:scanf函数用于从标准输入流(键盘)读取数据,并根据格式化字符串的指定将数据存储到指定的变量中。

例如:```cint age;scanf("%d", &age);```上述代码将从标准输入流读取一个整数,并将其存储到变量age中。

2. fgets函数:fgets函数用于从文件流或标准输入流中读取一行字符串并存储到指定的字符数组中。

例如:```cchar name[100];fgets(name, sizeof(name), stdin);```上述代码将从标准输入流读取一行字符串,并将其存储到字符数组name中。

二、输出流输出流用于向外部输出数据。

C语言提供了多种输出函数,包括:1. printf函数:printf函数用于向标准输出流(屏幕)输出格式化的数据。

例如:```cint num = 10;printf("The number is: %d\n", num);```上述代码将输出"The number is: 10"。

2. fputs函数:fputs函数用于向文件流或标准输出流中输出字符串。

例如:```cchar message[] = "Hello, world!";fputs(message, stdout);```上述代码将字符串"Hello, world!"输出到标准输出流。

三、文件流除了标准输入输出流外,C语言还支持文件流,用于读写文件。

文件流的操作需要使用文件指针,并且需要注意文件的打开和关闭。

输入输出流

输入输出流

输入输出流的相关简介系别:计算机技术与信息管理系班级:09软件技术姓名:徐燕学号:09207745目录一.Java输入输出流详解 (3)1.什么是流: (3)2、流的分类 (3)2.1字节流 (3)2.2.字符流 (4)2.3.对象流 (4)4.字节流与字符流的区别: (4)二.流的层次结构 (5)1.InputStream类 (6)2.OutputStream类 (7)3.FileInputStream类 (7)4.FileOutputStream类 (8)5.File类 (8)6.从一个流构造另一个流 (9)7.BufferInputStream和bufferOutputStream (10)8.printstream (11)三.字符流的读取和写入 (11)1.BufferInputStream和bufferOutputStream (14)2.printstream (15)四.java的i/o输入输出类怎么分出是输入流还是输出流? (15)五.java中什么时候用输入流,什么时候用输出流? (16)六.JA V A输出输入流函数注意事项 (16)1. 处理概述: (17)2. 字节流: (17)2.1输入流: (17)2.2输出流: (18)3、字符流: (18)3.1. 字符流处理概述 (18)3.2. 字符流处理 (19)3.3流处理中的其它方法: (20)七.总结 (21)一.Java输入输出流详解stream代表的是任何有能力产出数据的数据源,或是任何有能力接收数据的接收源。

在Java的IO中,所有的stream(包括Inputstream和Out stream)都包括两种类型:1.什么是流:流是一个抽象的概念。

当Java程序需要从数据源读取数据时,会开启一个到数据源的流。

数据源可以是文件,内存或者网络等。

同样,当程序需要输出数据到目的地时也一样会开启一个流,数据目的地也可以是文件、内存或者网络等。

输入流和输出流的概念

输入流和输出流的概念

输入流和输出流的概念
输入流和输出流是计算机网络中传输数据的基本方式,它可以完成两个计算机之间的
信息交互。

输入流指的是数据的流向,它把本地计算机的数据通过网络发送到远程计算机;而输出流则是数据的反向流动,它会把远程计算机的数据发送到本地计算机。

输入流和输出流均可以被离散地分割成多个数据帧,每个数据帧中都有各自的数据,
有助于监测每个帧中的数据是否在正确的时间、顺序和完整的状态发送出去或者接收进来。

输入流和输出流都是以流的方式进行数据传输的,通常在发送端需要压缩打包数据因为网
络的带宽是有限的,而接收端要对数据进行解压缩以恢复正确的数据信息。

由于数据要实现输入流和输出流的功能,因此每种数据在传输过程中都要经过适当的
处理,以便在传输完成后能够正确的显示或使用,这就是所谓的协议处理,比如 FTP、HTTP、SMTP 等等,都是用于在计算机间进行数据传输的协议处理。

输入输出流

输入输出流
*/
public class Files
{
public static void main(String[] args) throws IOException
{
Files f = new Files();
// System.out.println(f.readFile("f:\\LinkFile.java"));
}
}
}
/**
* 检查文件中是否为一个空
* @param filePath
* @param fileName
* @return 为空返回true
* @throws IOException
*/
public boolean fileIsNull(String filePath,String fileName) throws IOException
for(int i=0;i<ss.length;i++)
{
ss[i] = "信息技术和互联网(计算机软硬件,通讯) "+i;
}
f.writeFile("f:\\ss\\","TestFile.txt",ss);
}
/**
* 文件的写入
* @param filePath(文件路径)
/**
* @author zhangqinglin
* To change the template for this generated type comment go to
* Window>Preferences>Java>Code Generation>Code and Comments

标准输入输出流

标准输入输出流

标准输入输出流标准输入输出流(Standard Input/Output Stream)是计算机程序中常用的一种输入输出方式,它是程序与外部环境进行数据交换的重要方式。

在大多数编程语言中,都有对标准输入输出流的支持,比如在C语言中,可以使用stdio.h库中的函数来进行标准输入输出操作。

在本文中,我将介绍标准输入输出流的基本概念、使用方法和一些常见的应用场景。

标准输入流(stdin)是程序从键盘或其他输入设备读取数据的流,而标准输出流(stdout)则是程序向屏幕或其他输出设备输出数据的流。

这两个流在程序运行时都是默认打开的,可以直接使用,不需要额外的操作。

除了标准输入输出流之外,还有标准错误流(stderr),用于输出程序的错误信息。

在C语言中,可以使用printf函数向标准输出流输出数据,使用scanf函数从标准输入流读取数据。

比如:```c。

int num;printf("Please input a number: ");scanf("%d", &num);printf("The number you input is: %d\n", num);```。

上面的代码中,printf函数将提示用户输入一个数字,然后使用scanf函数从标准输入流读取用户输入的数字,并使用printf函数将其输出到标准输出流。

除了C语言之外,其他编程语言也都提供了类似的标准输入输出流操作方式。

比如在Python中,可以使用input函数获取用户输入,使用print函数输出数据。

在Java中,可以使用System.in和System.out来进行标准输入输出操作。

标准输入输出流在实际应用中有着广泛的用途。

比如在命令行程序中,通常会使用标准输入输出流来与用户进行交互;在网络编程中,可以使用标准输入输出流来进行数据的读写;在文件处理中,可以使用标准输入输出流来进行文件的读写操作。

java08(第8章输入输出流)

java08(第8章输入输出流)

在java.io包中定义了很多这二个基本类具体实现 包中定义了很多这二个基本类具体实现 输入输出功能的子类, 输入输出功能的子类,表8.1为部分常用字节输入 为部分常用字节输入 流类和字节输出流子类的功能。 流类和字节输出流子类的功能。
表8.1
类 名 FileInputStream 和 FileOutputStream ByteArrayInputStream和 ByteArrayOutputStream ObjectInputStream 和 ObjectOutputStream FilterInputStream 和 FilterOutputStream DataInputStream 和 DataOutputStream BufferedInputStream 和 BufferedOutputStream
【例8-1 】
1. /* 读取文件 */ 2. import java.io.FileInputStream; 3. import javax.swing.JOptionPane; 4. class Example8_1 5. { public static void main( String args[ ]) 6. { byte buffer[ ] = new byte[2056]; 7. String str; 8. try{ 9. File file=new File("d:/jtest/test.dat"); 10. FileInputStream fileInput = new FileInputStream(file); 11. int bytes = fileInput.read( buffer, 0, 2056 ); //读到的字节数 读到的字节数 12. str = new String( buffer, 0, bytes ); 13. } 14. catch(Exception e) 15. { 16. str= e.toString(); 17. } 18. JOptionPane.showMessageDialog(null,str); 19. System.exit(0); //退出程序 退出程序 20. } 21. }

第7章 输入输出流

第7章 输入输出流

第7章 输入输出流
第7章 输入输出流
(2)返回流是否处于正常状态 :int fail() const; 该函数返回failbit状态,以判断流操作是否失败。failbit表 示发生流格式错误,但缓冲区中的字符没有丢失。这种错误通常 是可以修复的。 (3)判断流是否正常 int good()const; int operator void *(); 上述两个函数的功能相似,如果eofbit、failbit和badbit全 部都没有被置位[即均为 0,读写正常(即符合读取和写入的类 型),没有文件末尾],则返回1 (true),否则返回0 (false)。
第7章 输入输出流
C++程序设计
第7章 输入输出流
第7章 输入输出流
流类简介 标准流对象 控制 I/O 格式 调用cout的成员函数 调用cin的成员函数
本章内容
第7章 输入输出流
第一节 流类简介
常考知识点: C++流的基本概念 iostream中流类库的基本概念 主要头文件的基本功能 提取运算符>>的使用 插入运算符<<的使用
(1)返回流是否结束: int eof() const; 函数返回eofbit的值。当文本文件结束时,在输入流中会 自动设置eofbit。在应用程序中可以用eof( )函数测试是否到达 文件尾,当文件操作结束遇到文件尾时,函数返回1;否则返回0。 在标准输入流cin中,可以通过按下〈Ctrl+Z〉组合键表示 输入流的结束。
第7章 输入输出流
(3)设置和返回输出宽度 int width(int nw); 该函数将下一个输出项的显示宽度设置为nw。如果nw大于 数据所需宽度,则在没有特别指示时数据采用右对齐方式。如果 nw小于数据所需宽度,则nw无效,数据以默认格式输出。函数 width()的设置没有持续性,输出一项数据后自动恢复为系统默 认设置。

C++输入输出流--iostream详解

C++输入输出流--iostream详解

C++输⼊输出流--iostream详解C++输⼊输出流包含在头⽂件<iostream>中,流的定义如下:通过设备驱动程序与键盘、屏幕、⽂件、打印机等进⾏交互, iostream 类提供与之交互的⽅法。

输出流:输出流的对象是字节⽬标,三个重要的输出流类是ostream、ofstream和ostringsream。

Ostream派⽣于basic_ostream⽀持预定义的流对象⼜:cout标准输出cerr标准错误输出,不经过缓冲clog类似cerr,使⽤缓冲注:缓冲是指将所有输出集中存放,然后⼀次性显⽰在屏幕上,避免多次刷屏。

格式控制输出宽度:输出宽度可以采⽤<iostream>中⾃带的width()函数,或者使⽤< iomanip >中的setw, setw 和宽度均不截断值。

使⽤width()函数代码如下:1 #include "stdafx.h"2 #include <iostream>3using namespace std;456int _tmain(int argc, _TCHAR* argv[])7 {8double values[] = { 1.23, 35.36, 653.7, 4358.24 };9for (int i = 0; i < 4; i++)10 {11 cout.width(10);12 cout << values[i] << '\n';13 }14 getchar();15return0;16 }使⽤setw()函数1 #include "stdafx.h"2 #include <iostream>3 #include <iomanip>4using namespace std;56int _tmain(int argc, _TCHAR* argv[])7 {8double values[] = { 1.23, 35.36, 653.7, 4358.24 };9for (int i = 0; i < 4; i++)10 {11//cout.width(10);12 cout << setw(10) << values[i] << '\n';13 }14 getchar();15return0;16 }程序运⾏结果:宽度设置设置宽度后,cout默认空⽩填充,如果需要填充某个字符,可采⽤fill()或setfill()函数。

Java输入输出流(一)——常用的输入输出流

Java输入输出流(一)——常用的输入输出流

Java输⼊输出流(⼀)——常⽤的输⼊输出流1.流的概念:在Java中,流是从源到⽬的地的字节的有序序列。

Java中有两种基本的流——输⼊流(InputStream)和输出流(OutputStream)。

根据流相对于程序的另⼀个端点的不同,分为节点流和过滤流。

(1)节点流:以特定源如磁盘⽂件、内存某区域或者线程之间的管道为端点的构造输⼊输出流,是⼀种基本的流。

(2)过滤流:以其他已经存在的流为端点构造的输⼊输出流。

根据流中的数据单位分为字节流和字符流。

(1)字节流:流中的数据是以8位字节为单位进⾏读写,以InputStream和OutputStream为基础类。

(2)字符流:流中的数据是以16为字符为单位进⾏读写,以Reader和Writer为基础类。

2.字节流InputStream和OutputStream是字节流的两个顶层⽗类,提供了输⼊流类和输出流类的通⽤API。

2.1 输⼊字节流InputStream基本⽅法:(1)基本读⽅法;: int read() int read(byte[] b) int read(byte[] b,int off,int len)(2) 关闭流:void close()(3) 返回输⼊流中还有多少可读字节 int available()(4) 跳过指定字节 long skip(long n)(5) 回读数据 boolean markSupported() void Mark(int readlimt) void reset()2.2 输出字符流OutputStream基本⽅法:(1)基本写⽅法:void write(int c) void write(byte[] b) void write(byte[] b,int off,int len)(2) 关闭流:void close()(3)q强制输出:void flush()3.字符流:Reader和Writer是字符流的顶层⽗类,字符流能够处理Unicode字符集中的所有字符。

标准输入输出流

标准输入输出流

标准输入输出流标准输入输出流是计算机程序中非常重要的概念,它是程序与外部环境进行数据交换的桥梁。

在本文中,我们将深入探讨标准输入输出流的概念、作用以及在不同编程语言中的应用。

首先,让我们来了解一下标准输入输出流的概念。

标准输入输出流是指程序与外部环境进行数据交换的通道。

标准输入流通常用来接收外部输入的数据,例如键盘输入;而标准输出流则用来向外部环境输出数据,例如显示在屏幕上。

通过标准输入输出流,程序能够与用户进行交互,接收输入并输出结果,实现与外部环境的数据交换。

标准输入输出流在计算机编程中有着广泛的应用。

在C语言中,我们可以使用stdio.h头文件中的printf和scanf函数来进行标准输出和输入操作。

在C++中,我们可以使用iostream库中的cout和cin对象来实现标准输出和输入。

在Java中,我们可以使用System.out.println和Scanner对象来进行标准输出和输入。

无论是哪种编程语言,标准输入输出流都是至关重要的,它们为程序提供了与外部环境进行数据交换的能力。

除了标准输入输出流外,还有标准错误流。

标准错误流用来输出程序的错误信息,通常显示在屏幕上。

在C语言中,我们可以使用stdio.h头文件中的fprintf函数来向标准错误流输出信息。

在C++和Java中,也有类似的机制来处理错误输出。

标准错误流对于程序调试和错误处理非常重要,它能够帮助程序员快速定位和解决问题。

在实际编程中,我们经常会用到重定向标准输入输出流的功能。

通过重定向,我们可以改变程序的输入来源和输出去向,使得程序能够灵活地与不同的数据源进行交互。

在Unix和Linux系统中,我们可以使用<和>符号来进行输入输出流的重定向。

在Windows系统中,我们可以使用重定向符号来实现类似的功能。

通过重定向标准输入输出流,我们能够实现程序的自动化测试、批量处理数据等功能。

总结一下,标准输入输出流是计算机程序中非常重要的概念,它是程序与外部环境进行数据交换的桥梁。

介绍输入流与输出流异同点。

介绍输入流与输出流异同点。

介绍输入流与输出流异同点。

输入流和输出流是计算机程序中常用的概念,它们用于在程序和外部设备之间传输数据。

虽然输入流和输出流有一些相似之处,但它们之间也存在着一些区别。

输入流用于从外部设备(如键盘、硬盘或网络)读取数据到程序中。

它可以读取不同类型的数据,如字符、字节或对象。

输入流提供了一种将外部数据传输到程序的方法。

与之相对的,输出流用于将程序中的数据发送到外部设备,以便进行保存或显示。

输出流可以写入不同类型的数据,如字符、字节或对象。

它提供了一种将程序数据传输到外部设备的方法。

输入流和输出流都支持不同的操作。

输入流可以执行读取和跳过操作。

读取操作用于从流中读取数据,跳过操作用于跳过指定数量的字节或字符。

相比之下,输出流可以执行写入和刷新操作。

写入操作用于将数据写入流中,而刷新操作用于清空流并将缓冲区中的数据写入外部设备。

输入流和输出流还具有不同的特点。

输入流通常是单向的,即只能从外部设备读取数据到程序中。

而输出流也是单向的,只能将程序数据发送到外部设备。

这种单向性使得输入流和输出流在使用时需要分别打开和关闭。

另外,输入流和输出流还具有不同的读取和写入方式。

输入流通常是阻塞的,即当没有数据可读取时,程序会一直等待直到有数据可用。

而输出流通常是非阻塞的,即当数据写入流中后,程序可以继续执行其他操作。

总结起来,输入流和输出流是计算机程序中常用的概念,用于在程序和外部设备之间传输数据。

它们在读取和写入数据的方式、操作特点和使用方式上存在一些差异。

通过理解输入流和输出流的异同点,我们可以更好地使用它们来实现程序与外部设备之间的数据传输。

C语言的输入输出流

C语言的输入输出流

C语言的输入输出流C语言作为一种面向过程的编程语言,其输入输出流(Input/Output Stream)是非常重要的概念。

输入输出流允许我们在程序中与用户交互,从用户处接收输入并向用户展示输出。

本文将探讨C语言中的输入输出流相关的概念和函数,以及如何在程序中使用它们。

一、标准输入流(stdin)、标准输出流(stdout)和标准错误流(stderr)C语言中,有三个预定义的输入输出流,分别是标准输入流(stdin)、标准输出流(stdout)和标准错误流(stderr)。

它们分别被定义为文件指针,可以通过它们来进行输入和输出操作。

1. 标准输入流(stdin)标准输入流(stdin)用于从用户处接收输入。

在C语言中,我们可以使用`scanf()`函数来从标准输入流读取输入数据。

```c#include <stdio.h>int main() {int num;printf("请输入一个整数:");scanf("%d", &num);printf("您输入的整数是:%d\n", num);return 0;}```在这个例子中,`scanf()`函数用于从标准输入流(stdin)中读取一个整数,并将其存储到变量`num`中。

然后,我们使用`printf()`函数将输入的整数输出到标准输出流(stdout)上。

2. 标准输出流(stdout)标准输出流(stdout)用于向用户展示输出。

在C语言中,我们可以使用`printf()`函数向标准输出流打印输出。

```c#include <stdio.h>int main() {printf("Hello, world!\n");return 0;}```在这个例子中,`printf()`函数用于向标准输出流(stdout)打印字符串"Hello, world!",并在字符串的末尾添加一个换行符。

c语言输入流和输出流的概念

c语言输入流和输出流的概念

c语言输入流和输出流的概念C语言输入流和输出流的概念输入流的概念•输入流是指从外部获取数据并输入到计算机程序中的数据流。

在C语言中,输入流通常用于从键盘或文件中获取输入。

•C语言中的输入流通常使用`头文件中的函数来实现,如scanf和fscanf`等。

输出流的概念•输出流是指将计算机程序中的数据输出到外部设备的流。

在C语言中,输出流通常用于向屏幕或文件等外部设备输出数据。

•C语言中的输出流通常使用`头文件中的函数来实现,如printf 和fprintf`等。

输入输出流的关系•输入流和输出流是C语言中用来进行输入和输出操作的重要概念。

•输入流和输出流可以通过函数的调用来切换,在输入操作时使用输入流,在输出操作时使用输出流。

输入流的操作•使用输入流可以从键盘或文件中获取输入数据,并赋值给变量或数组。

常用的输入流函数包括:1.scanf:从标准输入流中读取数据,并按照指定的格式赋值给变量。

2.fscanf:从指定的输入流中读取数据,并按照指定的格式赋值给变量。

输出流的操作•使用输出流可以将程序中的数据输出到屏幕或文件等外部设备。

常用的输出流函数包括:1.printf:将格式化的数据输出到标准输出流(屏幕)。

2.fprintf:将格式化的数据输出到指定的输出流(通常是文件)。

输入流和输出流函数的格式化控制符•在输入流和输出流函数中,格式化控制符用于指定输入和输出的数据格式。

•常用的格式化控制符包括:–%d:用于输出或输入整数。

–%f:用于输出或输入浮点数。

–%c:用于输出或输入字符。

–%s:用于输出或输入字符串。

示例代码#include <>int main() {int num;char str[50];printf("请输入一个整数:");scanf("%d", &num);printf("您输入的整数是:%d\n", num);printf("请输入一个字符串:");scanf("%s", str);printf("您输入的字符串是:%s\n", str);return 0;}以上是对C语言输入流和输出流的简述,输入流用于获取外部数据输入到程序中,输出流用于将程序中的数据输出到外部设备。

第7章输入输出流

第7章输入输出流

(3) cout流在内存中对应开辟了一个缓冲区, 用来存放流中的数据,当向cout流插入一个 endl时,不论缓冲区是否已满,都立即输出 流中所有数据,然后插入一个换行符,并刷 新流(清空缓冲区)。 (4) 在iostream中只对“<<”和“>>”运算符 用于标准类型数据的输入输出进行了重载, 但未对用户声明的类型数据的输入输出进行 重载。
7.2 标准输出流
标准输出流是流向标准输出设备(显示器)的 数据。
7.2.1 cout,cerr和clog流
1. cout流对象 cout是console output的缩写,意为在控制 台(终端显示器)的输出。 (1) cout不是C++预定义的关键字,它是 ostream流类的对象,在iostream中定义。 (2) 用“cout<<”输出基本类型的数据时,可 以不必考虑数据是什么类型,系统会判断数 据的类型,并根据其类型选择调用与之匹配 的运算符重载函数。
2. cerr流对象 cerr流对象是标准错误流。cerr流已被指定 为与显示器关联。cerr的作用是向标准错误 设备(standard error device)输出有关出错 信息。cerr流中的信息只能在显示器输出。 当调试程序时,往往不希望程序运行时的出 错信息被送到其他文件,而要求在显示器上 及时输出,这时应该用cerr。cerr流中的信 息是用户根据需要指定的。
例7.5 通过测试cin的真值,判断流对象是否 处于正常状态。
#include <iostream> using namespace std; int main( ) {float grade; cout<<″enter grade:″; while(cin>>grade)//能从cin流读取数据 {if(grade>=85) cout<<grade<<″GOOD!″<<endl; if(grade<60) cout<<grade<<″fail!″<<endl; cout<<″enter grade:″; } cout<<″The end.″<<endl; return 0; }

文件输入输出流

文件输入输出流

文件输入输出流文件输入输出流是在计算机中进行文件读写操作的一种机制。

通过文件输入输出流,我们可以从文件中读取数据或者将数据写入文件中。

在程序开辟中,文件输入输出流常用于读取配置文件、读取和写入日志文件、进行数据持久化等操作。

文件输入输出流的基本概念和使用方法如下:1. 文件输入流(FileInputStream):用于从文件中读取数据。

- 创建文件输入流对象:可以使用FileInputStream类的构造方法来创建一个文件输入流对象。

需要提供文件路径作为参数。

- 读取数据:可以使用文件输入流对象的read()方法来读取数据。

read()方法会返回一个整数值,表示读取到的字节数据。

当读取到文件末尾时,read()方法会返回-1。

2. 文件输出流(FileOutputStream):用于将数据写入文件中。

- 创建文件输出流对象:可以使用FileOutputStream类的构造方法来创建一个文件输出流对象。

需要提供文件路径作为参数。

如果文件不存在,会自动创建新文件;如果文件已存在,会清空文件内容。

- 写入数据:可以使用文件输出流对象的write()方法来写入数据。

write()方法接受一个字节数组作为参数,将字节数组中的数据写入文件中。

文件输入输出流的使用示例:```javaimport java.io.FileInputStream;import java.io.FileOutputStream;import java.io.IOException;public class FileIOExample {public static void main(String[] args) {// 文件输入流示例try {FileInputStream inputStream = new FileInputStream("input.txt");int data;while ((data = inputStream.read()) != -1) {System.out.print((char) data);}inputStream.close();} catch (IOException e) {e.printStackTrace();}// 文件输出流示例try {FileOutputStream outputStream = new FileOutputStream("output.txt"); String data = "Hello, World!";byte[] bytes = data.getBytes();outputStream.write(bytes);outputStream.close();} catch (IOException e) {e.printStackTrace();}}}```在上面的示例中,我们通过文件输入流读取了名为"input.txt"的文件中的数据,并使用文件输出流将字符串"Hello, World!"写入了名为"output.txt"的文件中。

输入流与输出流

输入流与输出流
1
第八章 输入与输出流
键盘 程序
数据文件
屏幕 数据文件
综上所述,程序是数据处理中心。 无论是从键盘上读取数据或者从数据文件中读取数据都是由程序决定的。 把程序中的数据输出到屏幕上或者输出到数据文件中都是由程序决定的。
2
第八章 输入与输出流
8.1 流的概念
❖ 输入与输出流(I/O流) (1)输入流:把键盘上输入的数据或者是把数据文件中的数据 读入正在运行的程序中。(网络) (2)输出流:把正在运行的程序中的数据输出到屏幕上或者 输出到数据文件中。
5
第八章 输入与输出流
8.1 流的概念
❖ 字符流类:专门用于字符数据 ❖ 字节流类:用于一般目的
6
10.1 File类
首先讨论10.1.3节的内容,如何使用File类创建对象。对象可以是文件对象, 也可以是目录对象。
(1) 使用一个存在的文件创建一个文件对象;10.1.3 File f=new File("Example10_1.java"); 当前目录下已经存在文件: Example10_1.java
write方法的格式如下: public void write(byte b[]); public void write(byte b[],int off,int len);
作为字节流输入对象的文件,采用read方法按节读入到程序中;
作为字节流输出对象的文件,采用write方法按字节把程序的数据输出到字节 流输出对象的文件中;
10
第八章 输入与输出流
§10.1.4 使用Runtime 类运行可执行文件
◆用Runtime 类声明一个对象( Runtime类在ng包) Runtime ec;
◆ 然后使用该类的getRuntime()静态方法创建这个对象: ec=Runtime.getRuntime();
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

输入输出流是一个常把人搞晕的概念,问题出在哪儿?问题出在我们犯了习惯性思维的毛病,落入了“输入”、“输出”两词制造的陷井。

一讲到输入流,我们常常会不言而喻地把它理解为这个对象是用来读其他对象的,如把字节数组、字符串等读进来;同样,一说到输出流,常常会把它理解为,这个对象就是用来输出的,如把字节数组、字符串的内容输出来或写出来,等等。

要是这样理解,整好把它们理解错了个180度。

实际上我们首先应当把输入流和输出流分别这样理解:输入流的核心机能是把属于“自已缓冲区的”内容一个符一个符地读出来(可称为吐出来),展现给你;输出流的核心机能是把其它对象的内容一个符一个符地“写到属于自已的内存缓冲区”里去(可称为吃进去)。

下面我们来具体看一看:(一)ByteArrayInputStream(字节数组输入流)从字面上看ByteArrayInputStream是输入流,其实,我们对它的应用主要是把存放在它内部的东东(或者说把与它有联系的字节数组)一个一个字节地或成组地读(read)出来。

当我们想对一个字节数组一个字节一个字节进行过滤的时候,可以用它来实现。

使用这个类通常用以下几个步骤与方法(1)创建实例(也有的叫创建对象)。

如:byte buffer[]={'T','e','s','t'};//可以用其他方法制作数组。

ByteArrayInputStream inStream=new ByteArrayInputStream(buffer);(当然还有另外的构造方法)inStream即为实例。

这一步的作用,我们可以把它理解为inStream把buffer数组一次性地复制到自已内部的缓冲区,以后,inStream内部的各方法如read、skip、available、reset的操作对象就是这个内部缓冲区。

也就是说,我们可以认为,imStream内部有一个private(私有的)缓冲区,这个缓冲区被封装在inStream内,只有inStream的方法可以对它操作,外界是不可以直接读写这个缓冲区的。

构造inStream的过程,就是复制外部字节数组到inStream 私有缓冲区建立inStream的过程。

(2)让inStream来完成我们所要完成的任务。

你要让inStream来完成你想要完成的任务,必须是inStream所能完成的,也就是说,inStream 必须要有相应的方法。

inStream有哪些方法呢,有以下一些:public synchronized int read() 就是把实例缓冲区的内容一个字节一个字节地读出来,这是这个类最有价值的方法public synchronized int read(byte b[],int offset,int length) 读出多个字节(到b数组),返回值一般为读到的字节数。

但读到末尾时返回-1。

Public synchronized long skip(long n) 调用这个方法我们可以跳过我们想要跳过去的n个字节,当然,跳过的字节数必须是符合实际的(返回的就是跳过的字节数)public synchronized int available 调用这个方法我们可以得到私有缓冲区的字节数public synchronized void reset() 调用这个方法我们可以把私有缓冲区的指针调回到起始处,以便我们可以再重新来一次等等。

这些方法的详细描述和具体使用我就不赘述了,要了解详情请查阅有关资料。

(二)ByteArrayOutputStream(字节数组输出流)从字表看,ByteArrayOutputStream是输出流,问题是输出谁,输出到哪儿?哪儿是源,哪儿是目的地?其实我认为这个类也有它自已的private缓冲区(下称私有缓冲区),与ByteArrayInputStream不同的是,这个缓冲区是专门用来从外界吃字符进来的缓冲区,这个吃进来的动作是由该类的write方法来实现的。

使用这个类通常用以下几个步骤与方法:(1)创建实例。

创建实例的方法是:ByteArrayOutputStream outStream = new ByteArrayOutputStream();或者是如:long num=1024*1024;ByteArrayOutputStream outStream = new ByteArrayOutputStream(num);第二种方法创建了一个输出流实例,其中这个输出流的私有缓冲区长为1024*1024。

很明显,这个缓冲区一开始是空白的,它的作用就是为写信息进来准备空间。

(2)让outStream完成你想要完成的任务与ByteArrayInputStream一样,ByteArrayOutputStream类也有属于自己的方法,主要有:public sysnchronized void write(int b) 写一个字节(b)进来public sysnchronized void write(byte b[],int offset,int length) 把b中的一部分字节写进来Public sysnchronized void writeTo(OutputStream out) 把缓冲区内容写到另一输出流outpublic sysnchronized void reset() 把私有缓冲区指针重调到缓冲区开始处public syschronized byte[] toByteArray() 将私有缓冲区的内容作为一个字节数组返回(输出到一个数组中去)public int size() 返回当前私有缓冲区大小public String toString() 把私有缓冲区的内容转化为一个字符串public String toString(hit hibyte) 把私有缓冲区的内容转化为一个字符串。

其中hibyte指把字符(通常是8位的ASCII字符)转为16位的Unicode值时,高八位的值。

有关细节请查阅有关资料。

(三)小结输入、输出流是Java系统的一个重要组成部分,我们必须准确地理解它,否则我们就不能正确的应用它。

理解输入、输出流的基本线索是:输入流:首先是复制其他字节数组一次性填写自已的私有缓冲区,然后可以把私有缓冲区的内容一个一个地读出来,或成组地读出来,私有缓冲区的内容创建后只能读不能写。

输出流:首先是创建一个空白的私有缓冲区,然后把外界的信息一个一个或成组地写进私有缓冲区,私有缓冲区可以多次写,其内容也可以一次性地转换成其他串、字节数组等,但不能一个一个地从私有缓冲区读出来(全部方法我没有查阅,先这么认为)。

输入流是为你提供原料的,而输出流是供你存放制作好的产品的(当然这是相对而言)。

上述的认知主要是针对ByteArrayInputStream和ByteArrayOutputStream的,是我的个人理解,不要死扣上面的字眼,更不要轻易地推广到一般。

但尽管如此,理解了我上述所讲的两个流的“读出自己”与“写进自己”的实质,我认为对理解其它流也是有帮助的。

在学习认知其它的流时要注意,输入流可以通过复制(更准确地说是链接)其他输入流来创建实例,同样输出流也可以通过链接其他输出流来创建实例,这些内容留给网友们去思考与发挥吧。

最后,让我把clone来的一个程序炒卖给大家,以结束我的胡言乱语。

//filename:ByteArrayIODemo.javaimport java.io.*;public class ByteArrayIODemo{public static void main(String args[]) throws IOException{String s ="This a test";byte buffer[]=s.getBytes();ByteArrayOutputStream byteArrayOut = new ByteArrayOutputStream();for(int I=0;I<buffer.length;++I)byteArrayOut.write(buffer[I]);//由字节数组创建字节输入流ByteArrayInputStream inStream = new ByteArrayInputStream(byteArrayOut.toByteArray());//读写boolean eof=false;while(!eof){int c=inStream.read();if(c==-1) eof=true;else System.out.print((char)c);}System.out.println("\nThe'writeTo' method can produce same results.");//用ByteArrayOutputStream的writeTo()方法写byteArrayOut.writeTo(System.out);byteArrayOut.close();//available()与reset()的使用System.out.println("\nThe buf of inStream has the length(before seset):"+inStream.available());inStream.reset();System.out.println("\nThe buf of inStream has the length:"+inStream.available()); inStream.close();}}。

相关文档
最新文档