java流的主要方法

java流的主要方法,第1张

Java的流 *** 作分为字节流和字符流两种。

1、 字节流

所有的读 *** 作都继承自一个公共超类javaioInputStream类。

所有的写 *** 作都继承自一个公共超类javaioOutputStream类。

InputStream和OutputStream都是抽象类。

InputStream有6个低级输入流:

低级流

流的用途

ByteArrayInputStream

从内存数组中读取数据字节

FileInputStream

从本地文件系统中读取数据字节

PipedInputStream

从线程管道中读取数据字节

StringBufferInputStream

从字符串中读取数据字节

SequenceInputStream

从两个或多个低级流中读取数据字节,当到达流的末尾时从一个流转到另一个流

Systemin

从用户控制台读取数据字节

InputStream还有一个子类:过滤器流javaioFilterInputStream。过滤器流即能把基本流包裹起来,提供更多方便的用法。

FilterInputStream 类的构造方法为FilterInputStream(InputStream),在指定的输入流之上,创建一个输入流过滤器。

过滤器输入流

流的用途

BufferedInputStream

缓冲区对数据的访问,以提高效率

DataInputStream

从输入流中读取基本数据类型,如int、float、double或者甚至一行文本

LineNumberInputStream

在翻译行结束符的基础上,维护一个计数器,该计数器表明正在读取的是哪一行。

PushbackInputStream

允许把数据字节向后推到流的首部

2、 字符流

注:是在jdk11里面引进的,上面字节流是在jdk10引进的。当用于处理文本数据时,选择字符流比字节流更好。但对只出路基本数据类型的开发者,可以继续使用字节流。

所有的读 *** 作都继承自一个公共超类javaioReader类。

所有的写 *** 作都继承自一个公共超类javaioWriter类。

同样Reader和Writer也是抽象类。

Reader的常用的子类如下:

低级读取器

流的用途

CharArrayReader

从字符数组中读取数据

InputStreamReader

FileReader(InputStreamReader的子类)

从本地文件系统中读取字符序列

StringReader

从字符串中读取字符序列

PipedReader

从线程管道中读取字符序列

InputStreamReader重点讲解:

InputStreamReader是从输入流中读取数据,连接输入流于读取器。如:

new InputStreamReader(Systemin)

构造方法:

InputStreamReader(InputStream)

用缺省的字符编码方式,创建一个 InputStreamReader。

InputStreamReader(InputStream, String) 用已命名的字符编码方式,创建一个 InputStreamReader。 常用的过滤器读取器:

过滤器读取器

流的用途

BufferedReader

缓冲数据的访问,以提高效率

LineNumberReader(BufferedReader的子类)

维护一个计数器,该计数器表明正在读取的是哪一行。

FilterReader(抽象类)

提供一个类创建过滤器时可以扩展这个类

PushbackReader(FilterReader的子类)

允许把文本数据推回到读取器的流中

这些过滤器读取器都可以传入一个Reader作为构造方法的参数。

接收字节数的差值并转化。

1、引入需要的头文件:QNetworkInterface和QTimer。

2、在类的成员变量中定义一个QTimer对象,用于定时更新接收字节数。

3、在类的构造函数中初始化QTimer对象,并设置其时间间隔。

4、槽函数中调用QNetworkInterface:allInterfaces方法获取所有网卡接口信息,从中筛选出需要监测的网卡接口,并获取其接收字节数。

5、计算接收字节数的差值,并将其转换为人类可读的格式。

6、更新界面显示,展示网卡接收字节数。

import javaioBufferedInputStream;

import javaioByteArrayOutputStream;

import javaioFile;

import javaioFileInputStream;

import javaioInputStream;

public class FolderContent {

/

获得文件内容

@param fileName

@return

@throws Exception

/

public static byte[] getFileContent(String fileName) throws Exception{

File file = new File(fileName);

if( fileexists() ){

InputStream is = new BufferedInputStream(new FileInputStream(file));

byte[] b = new byte[1024];

int len = -1;

ByteArrayOutputStream baos = new ByteArrayOutputStream();

while ( (len = isread(b, 0, blength)) != -1) {

baoswrite(b, 0, len);

}

baosflush();

isclose();

return baostoByteArray();

}

return null;

}

private int getFileContent(ByteArrayOutputStream baos,File file) throws Exception{

InputStream is = new BufferedInputStream(new FileInputStream(file));

byte[] b = new byte[1024];

int len = -1,fileLen = 0;

while ( (len = isread(b, 0, blength)) != -1) {

baoswrite(b, 0, len);

fileLen += len;

}

baosflush();

isclose();

return fileLen;

}

public byte[] getFolderContent(String folderName) throws Exception{

File folder = new File(folderName);

if( !folderexists() ){

throw new Exception("文件不存在。");

}

if( !folderisDirectory() ){

throw new Exception("文件不是目录。");

}

ByteArrayOutputStream baos = new ByteArrayOutputStream();

File[] files = folderlistFiles();

for( int i=0; i <fileslength; i++ ){

if(!files[i]isDirectory()){

int fileLen = thisgetFileContent(baos, files[i]);

Systemoutprintln("加载了文件:"+files[i]getAbsolutePath()+"的数据,长度:"+fileLen);

}

}

return baostoByteArray();

}

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

FolderContent content = new FolderContent();

byte[] data = contentgetFolderContent("d:/");

Systemoutprintln(datalength);

}

}

一、使用Systeminread()一次获取一个字节

输入再多数据,只会获取第一个字节的int形式。获取的是字节,而不是字符,所以如果输入中文字符,强转后会得到乱码

1 try{2 int in_num=Systeminread(); //获取的是一个字节的int类型

3 Systemoutprintln("强转前:"+in_num);4 Systemoutprintln("强转后:"+(char)in_num);5 } catch(IOException e) {6 eprintStackTrace();7 }

1输入:你

强转前:196强转后:

2输入:@

强转前:64强转后:@

3输入:space(一个空格)

强转前:32强转后: //强转后得到的是一个空格,有占位。只是看不到而已

4输入:enter(换行)

强转前:13强转后: //强转后得到的是一个换行。

5输入:tab(水平制表符)

强转前:9强转后: //强转后得到的是一个水平制表符(8个空格)

不行! 因为,字符流在读取完了字节数据后并没有直接往目的地写,而是先查编码表,查到对应的数据就将该数据写入目的地。如果查不到,则码表会将一些未知区域中的数据去map这些字节数据,然后写到目的地,这样的话就造成了源数据和目的数据的不一致。

以上就是关于java流的主要方法全部的内容,包括:java流的主要方法、qtwindows获取网口接收字节数、怎么获取文件的二进制流等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/9434630.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-28
下一篇 2023-04-28

发表评论

登录后才能评论

评论列表(0条)

保存