Java输入输出流全解析:从基础到对象序列化
创始人
2025-03-27 15:42:21
0 次浏览
0 评论
JAVA的输入输出流是指的什么啊?
Java语言的输入和输出功能非常强大且灵活。唯一的缺点是输入和输出代码似乎不是很简洁,因为通常需要包装许多不同的对象。
在Java类库中,该零件的内容很大,因为它涉及各种字段:输入和标准输出,文件操作,网络上的数据流,字符串流,对象的对象,对象的对象,zip文件流...本文的目的是为您提供简要介绍。
流是一个非常生动的概念。
当程序必须读取数据时,将打开流程,从而导致数据来源。
此数据源可以是文件,内存或网络连接。
同样,当程序必须编写数据时,将向目的地打开流程。
At this moment, you can imagine that the data are as "streaming" in it, as shown in the following figure: there are two types of flows in java, one is the flow of bytes and the other is the flow of characters, which are represented by four abstract classes (each flow includes two types of input and output, so there are four in total): inputterream, outputter, reader, writer. Java中的其他不同流程是从它们中得出的:第一个Java版本中已经存在InputStream和OutputStream。
它们基于字节流,而读者和作家随后添加了基于字符的流量。
上面的层次结构图是Java类库中的基本层次结构系统。
在这四个抽象课程中,InputStream和Reader定义了完全相同的接口:Invarod()Invarre(Charcbuf [])意图(CharcBuf [],IntaffSet,Intlength)对于输出流和作者:Intwrite(Intwrite(intc)Intwritite(intc)intwritite(intc)intwritite(charcbuf [charcbuf [])intwrite(charcbuf [charcbuf int int int int int int int int int int int int -int -for-],int -for -off-- basseg in.Readline()! {BufferedReaderin2 = newBufferedReader(newstrreader(s2 )); int linecount = 1 ; while(((s = in2 .Readline())!= null)out1 .println(linecount +++”:“+s); out1 .close();} catch(eofexception){system.err.println(“ endofstream”);}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}可以解释:1 bufferDreader是读者子类,读者子类,它具有缓冲的功能,避免了从物理设备中读取信息的频繁阅读。
它具有以下两个制造商:BufferedReader(Readerin)BufferReader(Readerin,insz)SZ这是指定拭子的大小。
他的基本方法:voidclose()//关闭vaidmark流(Intradaheadlimit)//标记当前的booleanmarksupportted()//如果Support Mark Intod () // inherited from the Reader Interaction and Return Booleandy () which determines the streaming (// which is inherited from streaming (/) which is inherited from streaming (// of return return return (return return return () which is transforming into streaming (ready to be read into voidreset () // restore the most near Longskip sign (LONGGN) // Skips the specified number of Caracter Reading 2 . InputStreamReader是Inputstream和Reader之间的桥梁(“ iodemo.out”); Flow,也就是说,我们可以将某些其他流程设置为标准输入或输出流,请参见以下示例:importjava.io。
buffo redinputStreamin = newBufferedInputStream(newfileInputStream(“ redirecting.java”)); printStreamout = newprintStream(newBufferedOutputstream(newFileOutputstream(“ test.out”))); system.setin(in); syst em.setout(out); BufferedReaderbr = newBufferedReader(newInputStreamReader(system.in));弦while((s = br.readline())!= null)system.out.println(s); out.close(); System.SetOut(console);}}这里Java .lang.System的staticvoidSetin(InputStreamin)staticVoidSetOut(printStreamOut)提供了一种方法来重新定义输入和标准输出的流量。
这样做非常方便。
例如,程序的结果很多,有时您甚至必须转动页面以查看它,这是不舒服的,以查看结果。
这就是为什么可以将标准输出流定义为文件流的原因。
执行程序后,它更加直观。
Java流有另一个重要目的,其中包括使用对象的流动来使用对象。
以下将开始提出此问题。
当程序运行时,变量数据存储在内存中。
程序完成后,数据将无法保存。
解决方案是在文件上写数据。
Java提供了一种可以在文件中写入对象的机制,然后从文件中读取对象并还原它们。
这是对象的SO序列化。
它主要用于RMI(ReletemeThodInvocation)和Javabeans。
但是,它在日常应用中也是非常有用的技术。
所有必须实现对象序列化的对象都必须首先实现序列化接口。
让我们看看一个示例:importjava.io。
*; importjava.util。
*; publinClassLogonimplemizizable {私有= newdate(); privateStringusername; privateTrytranstringPassword;登录(字符串,字符串pwd){username = name; password = pwd;} publicString toString(){stringpwd =(password == null)? “(n/a)”:密码;返回“ logonInfo:\ n”+“用户名:”+用户名+“ \ ndate:”+日期+“ \ npassword:”+pwd;} publicStaticVoidMain(string [string [] ardioException throwSioException,classNotFoundFoundException {logonexception {logona = newogona = newogona = newogona = newogona = newogone = newogon = newogon = newogon = newogon(Morgan8 3 ) system.out.println(“ logon =”+a); ObjectOutputStrestrea =newObjectOutputStream(newFileOutputstream(“ logon.out”)); O.WriteObject(a); o.close(); intnsecondi = 5 ; longt = system.currentimemillis() +秒*1 000; while(system.current timemillis()
因此,在仪表的主要方法中obj = newObjectOutputstream(newfileOutputstream(“ logon.out”));创建一个新的对象输出流以包装文件流,表明对象序列化的目标是登录文件。
然后使用写入方法开始写作。
当您要还原ObjectInputStreamin = NewObjectInputStream(NewFileInputStream(“ logon.out”))时,这也很简单。
使用文件流登录创建一个新的输入流对象。
作为参数,因此请调用ReoDobject方法。
应当指出的是,关于对象的序列化的神奇之处在于,它建立了一个对象网络,该对象包含所有对象,其中包含对象中的参考点,以序列化并将其写入文件中。
更令人惊讶的是,如果同时串行更多对象,则将共享和编写相同的内容。
这确实是一个很好的机制。
它可以用来获得深层副本。
此处的关键字的暂时性意味着当前内容不会像示例中的密码一样序列化,因此必须保密,因此不写在文件中。
在此简介中,我将简要介绍Java的输入和输出功能。
本文的目的只是开始好。
我希望每个人都能对Java的输入和输出流有基本的了解。

java中的输入输出流怎么好理解?请各位大侠说的仔细明白一点。我一直搞不懂原理哦。
我将用非专业语言向您解释!想要爪哇得到你插入的东西。Java应该有能力接受您。
这是输入电流。
作为溪流,水流入河中。
例如,您输入的字符串流入流中的Java。
这是手动输入范围。
文件登录也是如此。
Java想要读取一个文件,并且该文件将在流中的Java中流动,然后Java分析输入流。
至于输出流,原理与输入流相同。
如果Java想通过一系列分析绘制您在屏幕上放置的内容,它也将以溪流流入河流!文档也是如此。
在生成文件时,通过几列计算和包装,它们最终将通过您的实心计算机上的输出流进行流动!输入和输出流的最佳示例是发送文件的原理。
我选择一个文件以发送服务器,服务器通过打开输入流来分析文件。
然后通过几列分析它,最后通过输出流。
,流到另一台计算机。
然后另一台计算机打开输入流。
。
。
。
然后,通过输出流,将退出实心盘!
输入输出流
Java中的InputStream和输出(输出)用于处理数据阅读和记录过程。这些流可以将数据存储在文件,网络或内存中。
InputStream是基本输入的抽象层,而输出层是基本输出层。
字节流在处理Unicode数据方面有不便,因此Java提供了专门的阅读课程和作者来处理字符,以基于字符而不是字节来处理角色。
InputStream层提供了读取字节的读取方法,如果到达文件的末尾,则具有int的返回值,并返回-1 不同的子层层根据需要覆盖此方法,例如FileInputStream从文件中读取system.in。
从仪表板或文件的方向读取。
InputStream还提供其他阅读方法,例如ReadAllBytes,作为阅读方法的扩展。
输出流层提供了一种录制方法,可以一次由字节编写,也可以同时用字节数组编写。
In.transferto(输出)方法用于将输入数据传输到输出流。
完成阅读和写作任务后,该方法被要求关闭资源以避免浪费系统的I/O资源。
关闭方法将自动排放输出缓冲区。
如果需要手动放电,则可以调用冲洗方法。
根据使用的情况,将Java的I/O流家族分为不同的类型,例如基本的阅读和二进制记录的每日前缀,邮政编码以压缩格式读取和记录数据,读者和作家专门用于处理Unicode文档。
此外,可以关闭界面,可以放电,可读和访问,以提供诸如关闭资源,清爽缓冲区,阅读和持续内容之类的活动。
诸如BufferedInputStream和BufferedOutputStream之类的过滤图层提供I/O缓冲区功能,以提高工作效率。
tublbackInputStream允许读取下一个数据位并返回。
链结构可以创建所需的I/O流。
I/O文本包括二进制和链过程。
outputStreamWriter将Unicode加密输出转换为字节和InputStreamReader,以将字节转换为字符。
加密方法应在施工方法中批准。
PrintWriter用于编写文档,支持数字输出,字符和格式,并且可以自动刷新缓冲区。
处理输入时,您可以使用扫描仪层的下一个方法,NextLine或Uarelimiter读取数据。
阅读文本的输出时,您可以使用files.readallbytes读取字节,readallines来读取许多行和列表。
流量方法返回流量。
处理对象的输入和输出时,请使用ObjectInputStream和ObjectOutPutputStream类的ReadObject和WriteObject方法来读取和写入。
自我填充的机制设置了遇到的每个参考对象的 - 范围的数量,当您第一次遇到对象时,将其数据写入输出流中,然后在遇到相同引用时提及上一个对象,以识别读取和记录对象。
了解顺序格式包括类名称,se -rates,标志和数据描述。
每个对象顺序包含有关其类的信息,并描述数据域。
修改默认的顺序机制时,请使用瞬态关键字来标记不需要顺序自我转换的区域。
执行接口的对象可以串行可以自定义读取和编写对象的方法。
SE -R。
通常用于收集和传输网络并锁定使用数量的使用数量,以确保参考对象的唯一属性。
Java7 引入了链接接口和文件层,以简化文件系统的操作。
该路径提供了诸如组合路径,分析,相对路径和标准化之类的方法。
该路径可以创建一个扫描仪对象以获取文件。
在阅读和写入文件时,该文件提供了常见的方法,例如ReadAllBytes,Readallines和Writing。
通过CreateRectory和Createfile方法创建文件和文件夹。
活动文件包括复制,移动,删除和获取文件属性。
可以通过fileSystems.newfilesystem方法通过zip文件系统删除该文件。
文件使用操作系统虚拟内存技术的内存映射,以通过文件获取抽象渠道,并使用地图方法获取字节缩影。
预防性验证用于检测文件更改的周期。
缓冲层提供了缓冲的数据结构,包括Bytebuffer和Charbuffer等原始缓冲区,以读取和写数据。
文件锁用于控制对文件的多线程访问。
锁定是通过Filechannel的锁定和测试方法获得的,并使用Try-With语句安全释放锁。
Filelock提供了共享和独家锁来控制阅读和记录活动。
使用测试语句确保它可以准确发布。
java 输入输出流 (被采纳为答案者加100分)
其中,BufferedInputStream是FileInputStream的子类。您可以理解,这是处理文件的相同过程。
BufferedInputStream更有效。
原因是BufferedInputStream采用了一种更有效的字节流处理方法。
BufferedInputStream使用缓冲流将内部邮票连接到I / O流,从而使Java程序可以同时操作多个字节,从而提高效率。
InputStreamred derice制造商采用两个参数,一个是关联的文件,另一个是字符解码方法。
因此,实际上,通过InputStreamReader实例读取的内容不再是磁盘上的原始字节数据,而是根据您指定的解码方法(如果未指定它,请使用默认系统,GBK / GB2 3 1 2 下的Win2 000下)将OC转换为字符流。
请注意字节流和字符流之间的差异。
一个字节是8 位(在3 2 位机器上),并且字符包含的字节数与不同的编码 /解码方法链接,例如GBK是一个字节,UTF-8 是可变长度为1 -3 的字节,utf-1 6 和utf-1 6 is utf-1 6 is as 2 个字节是2 个字节。
因此,您应该注意的是,当您使用InputStreamReadRead Leader读取文件时,您应该知道该文件在存储时编码哪种方法,否则,如果指定不良解码方法,则读取会模糊。
但是,如果您在整个英语环境中退后一步,那么问题并不那么严重。
因为所有字符在前七个数字中都与ASCII兼容(我想可能不是),但是当您的程序涉及汉字时,您肯定会出现错误。
那么FileInputStream的特征是什么?它的制造商只是一个,即关联的文件。
由于没有指定的解码方法,因此仅在不进行处理的情况下以字节流的形式读取文件。
您必须使用字节表来接受它,并且可以执行将来要执行的所有操作。
给您一个例子,测试ImportJava.io.bufferedInputStream; importjava.io.io.bufferedoutputstream; importjava.io.io.bufferedreader; importjava.io.file; importjava.i O.FileInputStream; importjava.io.filetfoundexception; importjava.io.io.fileOutputstream; importjava.io..filereader; importjava.io.ioexc插件; importjava.io.inputstream; importjava.io.io.inputStreamReader; importjava.io.outputstream; importjava.util。
*; publicClasStest {/ * public staticVoidDine(string [] args){stringstr = newsring(“ facericognitionIntinIntinMalinFraredDdamainhasreceInteCeinteTeTeTItitititititiTitiallittlettlettlettletlettletletletletletletleteheLiteHeLiteHeLiteHeLiteHelite Helite Helite Helite Helite Helite in litterible spectrimimimagery in StringTokerToken = NewsringTokenizer(str); hashtableHt = newhashable();而(token.h asmoretokens()){stringTemp = newstring(token.nexttoken()); ht.put(temp,temp);} enumationen = ht.keys(); while(in。
hasmorements()){objectObj =in。
netly(); system.out.print(“ key_no:” + obj); system.out.println(“ =” + ht.get(obj));}} * / publicStaticVoidMain(thong [] args){try {stringfile1 =“ d:\\ 1 .doc”; StringFile2 =“ D:\\ 2 .Doc”; copyfile(file1 ,file2 ); readfile(file2 ); // FileCheck(“ d:\\ test1 .txt”); // readfile(“ d:\\ test1 .txt”); // readfilebyte(“ d:\\ test1 .txt”); // readFileByFile(“ d:\\ test1 .txt”);} catch(ioexceptione){// todoauto-generaredcatchblocke.printacktracetrace();}}}}}}}} publicStaticVodTestFile() (strin ginname,stringoutname)throwsioxception(netmp = newfile(outname); if(!tmp.canread())tmp.CREATEENEWFILE(); tampampinputStreamin = newbuffere dinputstream(newfileinputstream(inname)); bufferedOutputStreamout = newBufferedouststream(newFileOutStream(outname)); copyfile(in,in,true);} publicStaticVodIdReadFile(stringInname)throwsioede(butteredReaderred = newbufferdader(newInputStreamReader(newfileinpst ream(innov)(innov)) (bufferedin putStreamRead = newbufferedInputStream(newfileInputStream(innov); intb = 0; while(((b = read.read.read()!= - 1 )system.Out.print.print.print.print.print((char)b);} public icvoidFilebyFile(stringname) butteredreaderbr = newbufferdreader(fr); 。
打印(“ CanonicalName:” + F.GetCanonicalPath()); stringp = f.getParent(); if(p!= null)print(“ parentDirectory:” + p); if(f.canread())打印(“ Flecanberead!”); if(f.canwrite())print(“ Flecanbewraritable!”);日期ttime(f.lastModified());打印(“ LastModified Time:” + D); if(f.Isfile()){print(“ filesizeis:” + f.length() +“ by your”);} elseif(f.isDirectory()){print(“ isadirectry!”);} else {else {print(“ ni nithorafile!” ni nithorafile!
相关文章

Python列表两两相加:实现方法与代码...
2024-12-21 23:54:41
Python编程入门:教你轻松识别中国生...
2024-12-16 19:24:03
Python字符串输出技巧:25遍输出、...
2024-12-14 22:40:47
Python程序运行后不退出:两种方法及...
2025-03-16 11:44:46
Python入门全攻略:400页笔记,助...
2024-12-17 20:56:56
Python编程语言:简洁语法,强大功能...
2024-12-15 08:55:36
Python字符串和列表元素计数方法汇总
2024-12-16 17:07:45
Python字符串字符判断:轻松识别字母...
2024-12-17 00:25:03
Python编程狮App:专为初学者打造...
2025-02-11 01:04:57
Python实现1-100奇数和及偶数和...
2025-03-23 04:50:45最新文章
07
2025-04
07
2025-04
07
2025-04
07
2025-04
07
2025-04
07
2025-04
07
2025-04
07
2025-04
07
2025-04
07
2025-04
热门文章
1
Python中的format()方法:字...
formatformat在python中的含义2222.22E+00Format...
2
Python编程入门:全面解析Pytho...
python的基本语法基本的Python语法如下:1.变量的定义。在编程语言中,...
3
Python爱心绘制教程:使用turtl...
python的爱心代码教程(python画爱心代码)绘制心形的Python代码我...
4
Python字符串大小写转换方法全解析
python中字母的大小写转换怎么实现?在Python中,大小写转换由内置函数处...
5
Python字典:轻松获取最小值键与计算...
python在一个字典里,返回值最小元素对应的键,救解在Python字典中,如果...
6
Python字符串去重空格:strip(...
Python去除字符串中空格(删除指定字符)的3种方法在Python编程中,处理...
7
Python数组元素数量计算技巧分享
Python输出数组有多少个元素?简介:在本文中,首席CTO笔记将向您介绍Pyt...
8
简述python中pass的作用
pass语句的作用在许多编程语言中,包括Python;PASS语句用于在代码块中...
9
Python def 关键字详解:函数定...
def是什么意思编程?戴夫是什么意思?def是Python中的函数定义关键字,用...
10
python不区分大小写的方法
Python字符串不区分大小写在Python中,字符串操作默认区分大小写。但有时...