java的reset的简单介绍

博主:adminadmin 2022-12-24 14:33:07 52

本篇文章给大家谈谈java的reset,以及对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。

本文目录一览:

java输出流的reset()

输出流:OutputStream

有reset没有mark,reset是抛弃现在已经累积的数据流,重新开始累积

输入流:InputStream

有reset也有mark,reset是返回到上一次mark的position重新读取

java输入流中reset方法疑问

public void reset() throws IOException

将此流重新定位到最后一次对此输入流调用 mark 方法时的位置。

reset 的常规协定是:

1、如果方法 markSupported 返回 true,那么:

如果创建流以后未调用方法 mark,或最后调用 mark 以后从该流读取的字节数大于最后调用 mark 时的参数,则可能抛出 IOException。

如果未抛出这样的 IOException,则将该流重新设置为这种状态:最近一次调用 mark 以后(如果未调用过 mark,则从文件开头开始)读取的所有字节将重新提供给 read 方法的后续调用者,后跟任何从调用 reset 时起将作为下一输入数据的字节。

2、如果方法 markSupported 返回 false,那么:

对 reset 的调用可能抛出 IOException。

如果未抛出 IOException,则将该流重新设置为一种固定状态,该状态取决于输入流的特定类型及其创建方式。提供给 read 方法后续调用者的字节取决于特定类型的输入流。

除了抛出 IOException 之外,类 InputStream 的方法 reset 不执行任何操作。

抛出:

IOException - 如果未标记此流或该标记失效。

java中reset()函数的用法疑问,新手急救!!

public void mark(int readlimit)在此输入流中标记当前的位置。对 reset 方法的后续调用会在最后标记的位置重新定位此流,以便后续读取重新读取相同的字节。

mark 的常规协定是:如果方法 markSupported 返回 true,则输入流总会在调用 mark 之后记住所有读取的字节,并且无论何时调用方法 reset ,都会准备再次提供那些相同的字节。但是,如果在调用 reset 之前可以从流中读取多于 readlimit 的字节,则根本不需要该流记住任何数据。

public void reset()

throws IOException将此流重新定位到对此输入流最后调用 mark 方法时的位置。

reset 的常规协定是:

如果方法 markSupported 返回 true,则:

如果创建流以来未调用方法 mark,或最后调用 mark 以来从该流读取的字节数大于最后调用 mark 时的参数,则可能抛出 IOException。

如果未抛出这样的 IOException,则将该流重新设置为这种状态:最近调用 mark 以来(或如果未调用 mark,则从文件开始以来)读取的所有字节将重新提供给 read 方法的后续调用方,后接可能是调用 reset 时的下一输入数据的所有字节。

如果方法 markSupported 返回 false,则:

对 reset 的调用可能抛出 IOException。

如果未抛出 IOException,则将该流重新设置为一种固定状态,该状态取决于输入流的特定类型和其创建方式的固定状态。提供给 read 方法的后续调用方的字节取决于特定类型的输入流。

除了抛出 IOException 之外,类 InputStream 的方法 reset 不执行任何操作。

因为readlimit 表示mark的有效范围,即在使用mark进行标记后的readlimit个字符内reset有效. 就是说不管mark(int)里面的参数如何,调用reset或有效或无效,如果有效,reset会将此流重新定位到对此输入流最后调用 mark 方法时的位置,即"@"位置,后面读取的都是后面的字符;如果无效,读取的也都是后面的字符,所以输出结果都一样.因为你遇到"@"后立即遇到" ",所以立刻调用reset(),输出了"@",此流被定为在"@",但marked变为"false",所以不再输出"".

你把程序改为:

import java.io.BufferedInputStream;

import java.io.ByteArrayInputStream;

import java.io.IOException;

public class LeiA {

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

String s="This is a aa not.\n";

byte buf[]=s.getBytes();

ByteArrayInputStream in=new ByteArrayInputStream(buf);

BufferedInputStream f=new BufferedInputStream(in);

int c;

boolean marked=false;

while((c=f.read())!=-1){

switch(c){

case '':

if(!marked){

f.mark(1);//为什么mark里放任何值结果都一样

marked=true;

}else{

marked=false;

}

break;

case ' ':

if(marked){

f.reset();

System.out.print("");

}else

System.out.print((char)c);

break;

default:

if(marked)

System.out.print((char)c);

break;

}

}

}

}

可以清楚看到mark()和reset()之间的关系.

java 如何避免connection reset

connection

reset表示对方和你切断联系,其实无法完全避免。只能在发生问题时重新连接。

常见的connection

reset是数据库连接,一段时间不用后,系统自动断了。

简单的处理方法是放置测试的sql(一般jdbc有参数配置的),如果发生sql失败,就重新连接。

有时连接中断是由于网络配置,对于长期不活动的连接,系统自动中断,这时的处理方式是心跳。就是定期去通讯一次。保持连接的活性,系统就不会中断了。

关于java的reset和的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。

The End

发布于:2022-12-24,除非注明,否则均为首码项目网原创文章,转载请注明出处。