java流的主要方法

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java流的主要方法相关的知识,希望对你有一定的参考价值。

请详细说下

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

1、 字节流

所有的读操作都继承自一个公共超类java.io.InputStream类。

所有的写操作都继承自一个公共超类java.io.OutputStream类。

InputStream和OutputStream都是抽象类。

InputStream有6个低级输入流:

低级流
流的用途

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

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

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

StringBufferInputStream
从字符串中读取数据字节

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

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

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

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

过滤器输入流
流的用途

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

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

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

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

2、 字符流

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

所有的读操作都继承自一个公共超类java.io.Reader类。

所有的写操作都继承自一个公共超类java.io.Writer类。

同样Reader和Writer也是抽象类。

Reader的常用的子类如下:

低级读取器
流的用途

CharArrayReader
从字符数组中读取数据

InputStreamReader

FileReader(InputStreamReader的子类)

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

StringReader
从字符串中读取字符序列

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

InputStreamReader重点讲解:

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

new InputStreamReader(System.in)

构造方法:

InputStreamReader(InputStream)

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

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

过滤器读取器

流的用途

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

LineNumberReader(BufferedReader的子类)
维护一个计数器,该计数器表明正在读取的是哪一行。

FilterReader(抽象类)
提供一个类创建过滤器时可以扩展这个类

PushbackReader(FilterReader的子类)
允许把文本数据推回到读取器的流中

这些过滤器读取器都可以传入一个Reader作为构造方法的参数。
参考技术A 方法太多了。
去查查API什么都有了.
参考技术B 看api啊
主要read,write,flush,close等
参考技术C 这个问题我觉得还是看API比较好 里面的都有 而且里面的用法和相互之间的关系都讲的很清楚

Java 创建流的10种方法

用 Java 创建流的10种方法

Java 8 中引入的流 API ,用于处理对象的集合。Stream 是一个对象序列,它支持许多不同的方法,这些方法可以通过管道排列来产生所需的结果。

Java 流的特点是–

  • 流不是数据结构,而是从集合、数组或输入/输出通道获取输入。
  • 流不改变原始数据结构,它们只提供流水线方法的结果。
  • 每个中间操作都被延迟执行,并返回一个流,因此各种中间操作都可以用管道连接。终端操作标记流的结尾并返回结果。

1.Using Collection

进场:

  1. 获取收藏
  2. 使用 Collection.stream()方法从集合中构造一个顺序流
  3. 打印流
public void getStream01() 
		ArrayList<Object> list = new ArrayList<>();
		list.add("Geeks");
		list.add("for");
		list.add("Geeks");
		Stream<Object> stream = list.stream();
		Iterator<Object> iterator = stream.iterator();
		while (iterator.hasNext()) 
			System.out.println(iterator.next() + " ");
		
	

Output:

Geeks for Geeks

2.Create a stream from specified values

Stream.of(T…t) 方法可用于创建具有指定 T 值的流,其中 T 是元素。这个方法返回一个包含 t 个元素的顺序流。

public void getStream02() 
		Stream<Integer> stream = Stream.of(1, 2, 3, 4, 5, 6, 7, 8, 9);
		stream.forEach(s -> System.out.println(s + " "));
	

Output:

1 2 3 4 5 6 7 8 9

3.Create stream from an array:

()流和数组流是从指定数组创建顺序流的两种常用方法。当用非基元类型的整数数组调用时,这两个方法都返回一个流

3.1Create stream using Arrays.stream()

public void getStream03() 
		String[] arr = new String[]  "a", "b", "c" ;
		Stream<String> stream = Arrays.stream(arr);
		Iterator<String> iterator = stream.iterator();
		while (iterator.hasNext()) 
			System.out.println(iterator.next() + " ");
		
	

Output:

a b c

3.2 Create stream using Stream.of() A non interfering action to be perform on elements as they are consumed from the stream and returns also a new stream.

public void getStream04() 
		String[] arr = new String[]  "a", "b", "c" ;
		Stream<String> stream = Stream.of(arr);
		Iterator<String> iterator = stream.iterator();
		while (iterator.hasNext()) 
			System.out.println(iterator.next() + " ");
		
	

Output:

a b c

4.Create an empty stream using Stream.empty()

空()方法在创建时使用,以避免为没有元素的流返回 null。

public void getStream05() 
		Stream<Object> stream = Stream.empty();
		Iterator<Object> iterator = stream.iterator();
		while (iterator.hasNext()) 
			System.out.println(iterator.next() + " ");
		
	

5.Create a Stream using Stream.builder()

当应该在语句的右边部分另外指定所需的类型时,使用 builder()方法,否则 build()方法将创建流的实例。

public void getStream06() 
		Builder<Object> builder = Stream.builder();
		Stream<Object> stream = builder.add("a").add("b").add("c").build();
		Iterator<Object> iterator = stream.iterator();
		while (iterator.hasNext()) 
			System.out.println(iterator.next() + " ");
		
	

Output:

a b c

6.Create an infinite Stream using Stream.iterate()

iterate()方法返回一个无限顺序有序流,该流是通过对初始元素种子迭代应用函数 f 而产生的。在下面的示例中,结果流的第一个元素是迭代方法的第一个参数。为了创建每一个后续元素,该函数应用于前一个元素。在下面的例子中,第二个元素是 4

public void getStream07() 
		int seedValue = 2;
		int limitTerms = 5;
		Stream.iterate(seedValue, (Integer n) -> n * n).limit(limitTerms).forEach(System.out::println);
	

Output:

2 4 16 256 65536

7.Create an infinite Stream using Stream.generate() method

generate()方法接受一个供应商来生成元素,生成的流是无限的。因此,要限制它,请指定所需的大小,否则 generate()方法将一直工作,直到达到内存限制。

public void getStream08() 
		int limitTerms = 5;
		Stream.generate(Math::random).limit(limitTerms).forEach(System.out::println);
	

Output:

0.2293502475696314 0.5650334795948209 0.3418138293253522 0.36831074763500116 0.4864408670097241

8.Create stream from a Pattern using Predicate

在 java 8 中,Pattern 的谓词 asPredicate()方法创建了一个用于模式匹配的谓词布尔值函数。

public void getStream09() 
		Pattern pattern = Pattern.compile("^G");
		List<String> list = Arrays.asList("Geeks", "For", "Geek", "GeeksForGeeks", "A Computer Portal");
		list.stream().filter(pattern.asPredicate()).forEach(System.out::println);
	

Oupput

Geeks Geek GeeksForGeeks

以上是关于java流的主要方法的主要内容,如果未能解决你的问题,请参考以下文章

Java 创建流的10种方法

Java 创建流的10种方法

在java的exec上关闭流的正确方法是啥?

java 21 - 6 字符缓冲流的特殊方法以及该方法高效复制文件

Java之Stream流

Java中Steam流的用法及使用备忘