Java I/O全文摘要(六)过滤流,过滤流

udp收发包 发送程序 接收程序: 阅读详情

1.过滤流

"Filter streams are used for encryption, compression, translation, buffering, and much more."

过滤流用于加密,压缩,翻译,缓冲和其他功能。


过滤器从预先存在的流中读取数据,然后在传递到客户端程序之前,有机会改变他的数据。

可将多个流连成一条链对底层的流使用。

过滤流不仅仅移除掉你不想要的,还能增加你想要的。


2. 过滤流类

两个超级类:java.io.FilterInputStream和java.io.FilterOutputStream

public class FilterInputStream extends InputStream
public class FilterOutputStream extends OutputStream

它们都只有一个protected类型的结构体

protected FilterInputStream(InputStream in)
protected FilterOutputStream(OutputStream out)

由于结构体是保护的,所以需要采用子类实现部分功能,并提供public的结构体

它们使用一个超级类作为成员变量,然后对这个成员变量进行修饰

protected InputStream in
protected OutputStream out


其实除了构造方法,常用的是下面这些:

对于FilterInputStream:

public int  read( ) throws IOException
public int  read(byte[] data) throws IOException
public int  read(byte[] data, int offset, int length) throws IOException
public long skip(long n) throws IOException
public int  available( ) throws IOException
public void close( ) throws IOException
public void mark(int readlimit)
public void reset( ) throws IOException
public boolean markSupported( )

对于FilterOutputStream:

public void write(int b) throws IOException
public void write(byte[] data) throws IOException
public void write(byte[] data, int offset, int length) throws IOException
public void flush( ) throws IOException
public void close( ) throws IOException


所以,默认的行为只是转发相应的操作,例如:

public long skip(long n) throws IOException {
  in.skip(n);
}

以及

public void close( ) throws IOException {
  out.close( );
}

由于没有无参构造函数,所以在子类中你必须显示的调用父类的构造函数。


3. 过滤流类的子类

java.io包中包含了很多有用的过滤流子类

BufferedInputStream and BufferedOutputStream为原有的输入输出提供了缓冲字节数组,这样,再使用这个流就不必要从native方式去读取数据了。

这在很多时候能提高性能,并且运行输入流重读操作。


java.io.PrintStream允许非常简单的打印原始类型,对象和字符串字母。

使用平台默认的编码集来转化字符到字节。

System.out and System.err是最出名的java.io.PrintStream

你也可以自己实例化它。例如结合使用PrintStream to aFileOutputStream


PushbackInputStream拥有一个字节的回退缓冲,这样程序可以实现"unread"最后一个字符。

下一次读取时,这个字符将被重新读取。


ProgressMonitorInputStream将告知用户读了多少,还有多少可读。


DataInputStream and DataOutputStream将用平台独立的方式读写Java原始类型和String

(Big-endian for integer types, IEEE-754 forfloats anddoubles, a variant of UTF-8 for strings.)


ObjectInputStream andObjectOutputStream继承自DataInputStream and DataOutputStream,但它却可以像读取原始类型一样读取整个Java对象。


java.util.zip包中也包含了一些过滤流。用于压缩和解压。由于压缩和解压容易使得文件损坏,所以提供了一些校验和。


java.util.security包中包含了DigestInputStream andDigestOutputStream


JCE也提供了两个加密过滤流:CipherInputStream andCipherOutputStream


4.Buffered Streams

buffer流会读取超过所需的内容,而在需要时,可以直接从buffer中取出内容而无需再从实质的流中读取。

两个InputStream,两个OutputStream的构造方法

public BufferedInputStream(InputStream in)
public BufferedInputStream(InputStream in, int size)
public BufferedOutputStream(OutputStream out)
public BufferedOutputStream(OutputStream out, int size)

第一个参数指定了实际的流(当然,它也可能被装饰),第二个参数则是指定缓冲的大小。

没有指定则是2048,最佳实践通常取决于块的大小,小于512或者大于8192通常都不大合适。

理想情况是块的小整数倍。

当然,你可能在不可靠的网络流上使用较小的缓冲。

URL u = new URL("http://java.sun.com");
BufferedInputStream bis = new BufferedInputStream(u.openStream( ), 256);

这种情况下,使用了256长度的缓冲尺寸。


5. 一个缓冲流的例子

import java.io.*;
public class BufferedStreamCopier {
  public static void main(String[] args) {
    try {
      copy(System.in, System.out);
    }
    catch (IOException ex) {
      System.err.println(ex);
    }
  }

  public static void copy(InputStream in, OutputStream out)
   throws IOException {
    BufferedInputStream 
 bin = new BufferedInputStream(in);
    BufferedOutputStream bout = new BufferedOutputStream(out);
    while (true) {
      int datum = bin.read( );
      if (datum == -1) break;
      bout.write(datum);
    }
    bout.flush( );
  }
}

copy方法1字节1字节的拷贝,通常是没有效率的,但是如果使用了缓冲流,那么拷贝工作是在内存中进行的,就会变得有效率的多了。

有意的调用了flush方法,这是因为只有在缓冲流flush或者到达缓冲满时,才会使得实质的流到达数据的终点。

因此,调用flush()是十分有必要的。


6. 缓冲输入流(BufferedInputStream)的细节

BufferedInputStream继承自InputStream,它仅仅覆盖了父类的方法,没有提供任何新的方法。

 标记(Marking)和重置 (resetting)是支持的。


在Java版本1.2及之后,两个多byte读取都是采用逐字方式读取的。

buffer和状态信息都保存在受保护的域中。

protected byte[] buf
protected int    count
protected int    pos
protected int    markpos
protected int    marklimit

其中:buf是保存缓冲的byte数组,count是buffer中的byte数量,read()返回的index是pos,标记叫做markpos,领先于mark位置的长度使得mark无效叫做marklimit。


7 缓冲输出流(BufferedOunputStream)的细节

与BufferedInputStream很相似,它也有buf数组和pos表示位置

protected byte buf[]
protected int  pos

8 PushbackInputStream

java.io.PushbackInputStream提供了pushback缓冲,使用字节可以处于"未读取"状态。

换言之,可以添加byte到流里面,然后读取它。

PushbackInputStream允许程序在读取时往流里添加数据。

下次从这个流中读取数据,这些未被读取的数据将被读取。


默认情况下,这个流的buffer只有1字节长。

你可以通过构造方法来修改它.

public PushbackInputStream(InputStream in)
public PushbackInputStream(InputStream in, int size)

Unread data 将被放入栈中。

也就是如果你添加0,1,2 最终读出来会是2,1,0

样例代码如下:

PushbackInputStream in = new PushbackInputStream(System.in, 5);
in.unread(0);
in.unread(1);
in.unread(2);
System.out.println(in.read( ));
System.out.println(in.read( ));
System.out.println(in.read( ));

使用场景:

考虑Java语句 int count=7;. 编译器并不知道t是变量名的最后一个字母,直到读到等于号"="。

这时,可以unread =号

另一个是添加一些东西,如Unix和Mac的换行分割的问题。


【Java】I/O 流篇 —— 字节 I/O 流 I/O流(Input/Output Stream)是计算机中数据传输的一种抽象概念,用于描述数据在程序和外部设备(如文件、网络、内存等)之间的流动方式。可以将它想象成一条“数据管道”,数据像水流一样在这条管道中连续传输。作用:I/O 流用于读写文件中的数据(可以是读写文件,或网络中的数据)。读(Read) → Input(输入)当程序从外部(如文件、键盘、网络等)获取数据时,称为“读”操作。例如:读取文件内容、接收用户键盘输入、获取网络数据等。这属于输入(Input) 阅读详情

相关推荐

【Java】I/O 流篇 —— 字符 I/O 流

字符流的底层其实就是字节流:字符流 = 字节流 + 字符集特点输入流:一次读一个字节,遇到中文时,一次读多个字节GBK 一次读两个字节UTF - 8 一个读三个字节输出流:底层会把数据按照指定的编码方式进行编码,变成字节再写到文件中使用场景:对于纯文本文件进行读写操作。

m0_72516377的博客 1238

Java8之Stream

第一、Java8 Stream之filter,distinct,skip,limit,map,flatmap详细介绍 List<Integer> list= Arrays.asList(1,2,3,4,5,1); //1.filter过滤流中的数据。 List<Integer> result=list.stream().filter(i->i%2==0).collect(Collectors.toList()); System.out.println("filter过滤流中的数

龙吟山庄 1292

手把手教你用Origin拟合真应力-真应变曲线:从数据到加工硬化指数n的完整流程

本文详细解析了如何使用Origin软件拟合真应力-真应变曲线并计算加工硬化指数n的全流程。从数据预处理、曲线绘制到Hollomon方程拟合,逐步指导材料科学研究人员完成实验数据分析,帮助准确评估金属材料的力学性能与强化特性。

view3的博客 712

java过滤流

过滤流在读/写数据的同时可以对数据进行处理,它提供了同步机制,使得某一时刻只有一个线程可以访问一个I/O流,以防止多个线程同时对一个I/O流进行操作所带来的意想不到的结果。类FilterInputStream和FilterOutputStream分别作为所有过滤输入流和输出流的父类。   几种常见的过滤流         ◇ BufferedInputStream和BufferedOutput

zhongriqianqian2076的专栏 2608

高通9008模式隐藏技巧:不拆机用ADB命令+Diag协议进入EDL

本文深入解析高通EDL模式(紧急下载模式)的技术原理与实战应用,详细介绍了通过ADB命令和Diag协议无需拆机进入EDL的方法。涵盖硬件/软件触发方案、跨平台工具配置、Firehose协议解析及设备救砖流程,为开发者提供从基础到进阶的完整指南。

weixin_29191761的博客 1123

告别Visual Studio!用MSYS2+GCC+CMake在Windows上打造Linux式C++开发环境(保姆级避坑)

本文详细介绍了如何在Windows上使用MSYS2+GCC+CMake搭建Linux式C++开发环境,替代Visual Studio。从MSYS2的安装配置、MinGW-w64 GCC工具链的部署,到CMake项目的创建与构建,提供了保姆级教程和常见问题解决方案,帮助开发者高效过渡到命令行开发模式。

weixin_30298497的博客 324

Java语言的过滤数据流

为了解决不同数据流之间速度、数据格式差异的问题,以便提高输入/输出操作的效率(特别是当需要大量的输入、输出操作的程序时),因此,Java贴心的提供了过滤流。在已存在的数据流的基础上,过滤数据流与已经存在的数据流相联系,过滤流主要包括过滤输入数据流和过滤输出流。其中,过滤输入数据流从输入数据流中读取数据(以字节或者字符的形式存在),对这些数据进行加工处理,然后向内存提供特定格式的数据。而过滤输出数据流则是从内存中读取特定格式的数据,进行加工处理后,向输出数据流提供字节数据。

m0_57042151的博客 738

手把手教你用89C52单片机驱动0.96寸OLED(IIC接口,附完整代码)

本文详细介绍了如何使用89C52单片机通过I2C接口驱动0.96寸OLED显示屏,包括硬件连接、I2C通信原理、SSD1306驱动芯片的初始化及显存管理技巧,并提供了完整的代码示例和常见问题排查方法,帮助电子爱好者快速掌握OLED显示技术。

weixin_30781433的博客 369

java中过滤流_Java 过滤流

[ 过滤(Filter)流与装饰器 (Decorator) 设计模式 ]java.io.FilterInputStream和java.io.FilterOutputStream用来为一个输入(或输出)流添加额外的功能。FilterInputStream/FilterOutputStream本身继承于InputStream/OutputStream,是一个(is a)输入/输出流,同时它通过...

weixin_39567222的博客 1486

知识图谱中的 Ontology(本体论)

本文的部分图片和内容来自中国科学院自动化研究所刘康老师的课件 Ontology(本体论) Ontology 是(特定领域)信息组织的一种形式,是领域知识规范的抽象和描述,是表达、共享、重用知识的方法。 Ontology 是知识体系构建的关键技术,知识图谱是一种人工智能技术,它的关键在于让计算机能够处理人类的知识。然而,人类脑海中的知识通常是直觉性的,我们无法将这种直觉性的知识直接输入给计算机,On...

P01son的博客 2万+

【Windows Server 2019】活动目录 (Active Directory) ——将计算机加入域和脱离域

博文介绍了如何将计算机加入AD域和脱离AD域,包括加入域,验证客户机加入到域后的信息,使用域账户用户在客户机上登录,使用本地账户用户在计算机上登录,脱离域。

VMware, Windows, Linux, Cisco, Container, Kubernetes, Kali 6169

Java之I/O流(最详细的I/O流总结)

I/O流I/O流1、定义2、分类2.1 字节流和字符流2.2 输入流和输出流2.3 节点流和处理流3、结构4、字节流4.1 定义4.2 说明4.3 字节流概述4.4 InputStream的常用方法4.5 OutputStream的常用方法5、字节流读写文件5.1 说明5.2 注意5.3 字节输入流——相关代码5.4 字节输出流——相关代码6、文件的拷贝6.1 需求6.2 分析6.3 注意6.4 快捷键6.5 相关代码7、字节流的缓冲区7. 相关代码8、字节缓冲流8.1 说明8.2 特点8.3 相关代码8.

熊凯瑞的博客 9141

YOLOv13多分支融合机制+SE注意机制 RepVGGBlock_OREPA架构 map提升4.89,召回率提升8.66

本文提出了一种改进的YOLOv13目标检测模型,通过引入RepVGGOREPA模块和重参数化技术,显著提升了模型性能。实验结果表明,采用RepVGGBlock后,mAP提升4.89,召回率提升8.66%。文章详细介绍了模型移植过程,包括创建YOLOv13-REPVGGOREPA配置文件、修改任务处理代码和模块初始化文件,并提供了完整的OREPA模块实现代码。该模块通过多尺度特征融合和SE注意力机制,实现了训练时的丰富表征能力和推理时的高效计算,为YOLO系列模型提供了新的优化思路。

FJN110的博客 2650

Java I/O流面试之道

NIO的出现在于提高IO的速度,它相比传统的输入/输出流速度更快。NIO通过管道Channel和缓冲器Buffer来处理数据,可以把管道当成一个矿藏,缓冲器就是矿藏里的卡车。程序通过管道里的缓冲器进行数据交互,而不直接处理数据。程序要么从缓冲器获取数据,要么输入数据到缓冲器。

JavaSouth南哥 1363

一文吃透 SAP IDoc 状态码:从 TEDS1 到 WE02 排障,再到 ABAP 自动化监控

在 SAP 集成场景里,IDoc 往往是最常见、也最容易被低估的一条生命线:采购订单、发票、主数据、库存移动……只要系统之间要稳定地交换结构化业务数据,IDoc 就经常登场。真正让人头疼的,并不是 IDoc 本身,而是它在链路里到底走到了哪一步、卡在了哪里、该找谁背锅。这篇文章把常用的 IDoc 状态码按出站、入站拆开讲清楚,并且把每个状态对应的真实世界故障现象、排查入口、以及可以落地的 ABAP 监控代码串起来,让你看到状态码就能想到动作。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 405

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

Java I/O流详解

Java I/O流 1、Java I/O流概述 IO就是输入、输出。Java IO类库基于抽象基础类InputStream和OutputStream构建了一套I/O体系,主要解决从数据源读入数据和将数据写入到目的端的问题。我们可以将数据源和目的地理解为IO流的两端。 从一种数据源中通过InputStream流对象读入数据到程序内存中流程如图 1-1所示; 从程序内存中通过OutputStream流对象写入到目的地的流程图如图 1-2所示。 图 1-1 图 1-2 然后,除了面向字节流的InputSt

Window_mouse的博客 1万+

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

Java语言基础(九)Java I/O 流

本篇文章主要介绍了 Java 中的 I/O ,其中最重要的是 I/O 流的概念,然后举例说明了一些常用的输入输出操作,包括控制台、文件和网络中的数据输入输出。

青何 3184

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

Java I/O全文摘要(十)过滤流,压缩流

The java.util.zip package, shown in Figure 9.1, contains six stream classes and another  half dozen assorted classes that read and write data in zip, gzip, and inflate/deflate formats.  Java uses th

computer165的专栏 1537

【Java】文件类 和 I/O流详解

什么是文件?文件是计算机中存储数据的一种方式,它可以用来保存各种类型的信息,如文本、图像、音频和视频等。文件通常由文件名和扩展名组成,扩展名(后缀名)表示文件的类型或格式。在Windows系统中不同的文件后缀通常代表着不同的文件类型和默认打开方式,如 docx为WPS中word文档的后缀,jpg或png为常见的图片文件后缀,exe通过代表一个可执行程序等;但是Unix、Linux等操作系统上则没有这样精确的分类。文件的分类:文件总体上可以分为文本文件(ASCII码文件)和二进制文件。

一直往前走。 1793

【关于Java的 I/O 流】

《Java I/O流核心指南》摘要: Java I/O流是程序与外界交换数据的通道,分为字节流(处理二进制)和字符流(处理文本)。关键要点:1)字节流使用InputStream/OutputStream,字符流用Reader/Writer;2)必须使用缓冲流(BufferedXXX)提升性能;3)推荐try-with-resources自动关闭资源;4)文本处理需显式指定编码(如UTF-8);5)对象序列化用ObjectStream。NIO适用于高并发场景,传统项目推荐Buffered包装+正确编码处理。

weixin_64178283的博客 1057

Java基础——I/O流

流是一种抽象的概念,它代表了数据的有序传输。就像水流一样,数据从一个源(如文件、网络连接)流向一个目标(如内存、另一个文件)。在Java中,流可以看作是一系列的数据序列,程序可以从流中读取数据(输入流),也可以向流中写入数据(输出流)。Java的I/O流提供了丰富的类和方法,用于处理各种数据传输需求。通过合理选择字节流、字符流、处理流和对象流,可以高效地完成文件读写、网络通信等任务。在使用I/O流时,要注意资源的正确关闭,避免资源泄漏。同时,要根据具体的应用场景选择合适的流类型,以提高程序的性能和可维护性。

jukuya的博客 995

什么是I/O流以及怎么使用I/O流

一.什么是I/O流 I/O即对应的输入(IN)/输出(OUT),在Java也对应的是InputStream/OutputStream抽象类 而流是一组有序的数据序列 以先进先出的原则发送信息的通道 二.通过File类来操作文件 创建File类对象(参数对应的是操作文件的地址) public class TestFile { public static void main(String[] args) { File file=new File("D:/1.txt");//在D

菜鸟也学大数据的博客 2029

Java I/O流

I/O流就是存储和读取数据的解决方案。流:向流水一样传输数据。作用:用于读写文件中的数据(可以读写本地文件,或网络中的数据…)。IO流中以程序或(因为程序是运行在内存中的)为参照物看读写方向。

weixin_71219171的博客 729

Java I/O 流介绍

流是一种抽象的概念,它代表了数据的序列。数据就像水流一样,从一个地方流向另一个地方。在 Java 中,流可以是输入流,用于从外部源读取数据;也可以是输出流,用于将数据写入到外部目标。Java 的 I/O 流体系提供了丰富的类和接口,使得开发者能够方便地处理各种输入输出任务。字节流适用于处理二进制数据,字符流适用于处理文本数据。缓冲流可以提高 I/O 操作的效率,对象流则允许我们进行对象的序列化和反序列化。在实际开发中,我们需要根据具体的需求选择合适的流类来完成数据的读写操作。

zsnandzmn的博客 1003

Java --- I/O流的使用

I/O流(Input/Output Stream)是Java中用于处理输入和输出操作的机制,是一种顺序读写数据的模式,它的特点是单向流动。 输入流:从外部设备(如文件、网络、键盘)读取数据到程序中。 输出流:从程序中写入数据到外部设备(如文件、网络、控制台)。 I/O流的设计模式是面向字节和面向字符,并支持缓冲区、过滤器等高级操作。

记得开心一点嘛的博客 1484

Java I/O流概述

在Java编程中,I/O流是一种用于在程序和外部数据源之间传输数据的机制。这些外部数据源可以是文件、网络连接、内存中的数据等。I/O流以字节或字符的形式操作数据,具体取决于您的需求。缓冲流用于提高I/O性能。它们在内部维护了一个缓冲区,可以一次性读取或写入多个字节或字符,减少了磁盘或网络访问的次数,从而提高了效率。通过本文,我们深入研究了Java中的I/O流。我们介绍了字节流和字符流的基本概念,讨论了缓冲流的性能提升,以及如何处理异常和管理资源。

学IT,找陈寒 6834
上一篇: Java I/O全文摘要(五)数据源,网络流
下一篇: Proguard手册(少量进行了中文翻译)
computer165
博客等级 码龄16年 7粉丝 34原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值