java中关于FileReader的read方法!!

Posted

tags:

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

我想用java io中FileReader来实现文件的读入,可是我查了API文档里边FileReader没有自己的read方法,都是从其他流式输入中继承来的,这些都只能读int类型或者说读入到缓冲区中,在下不是很懂缓冲区及其用法,请高手赐教关于该read和其缓冲区的用法!感激!

FileReader的read() 方法是阻塞式的,读取字节或数据块,直到无数据输入。它要么返回数据的下一个字节,当到达文件末尾时,返回-1。这意味着,我们每循环读取一个字节,将其打印为十六进制字符串。顺便说一句,将InputStream转换成字节数组是可选的。另一方面,例2是按字符读取数据。继承自FileReader的InputStreamReader 的read() 方法读取单个字符,并返回该字符,当到达流末尾时,返回-1。 参考技术A BufferedReader reader = new BufferedReader(new InputStreamReader(new FileInputStream(fileName)));
reader.readLine();可以读一行数据。返回值是String类型
参考技术B BufferedReader reader = new BufferedReader(new InputStreamReader(new FileInputStream(fileName)));
reader.readLine();可以读一行数据。返回值是String类型
参考技术C BufferedReader reader=new BufferedReader(new FileReader(file));String str=reader.readLine() ;while(str!=null)...str=reader.readLine() ; 参考技术D l楼上说的很对,,,用多态的思想解决。。。

Java中关于OOM的场景及解决方法

Java中关于OOM的场景及解决方法

1OOM for Heap=>例如:java.lang.OutOfMemoryError: Java heapspace
【分析】
 
OOM是由于JVMheap的最大值不满足需要,将设置heap的最大值调高即可,参数样例为:-Xmx2G
【解决方法】
调高heap的最大值,即-Xmx的值调大。

2
OOM for Perm=>例如:java.lang.OutOfMemoryError: Java permspace
【分析】
 
OOM是由于JVMperm的最大值不满足需要,将设置perm的最大值调高即可,参数样例为:-XX:MaxPermSize=512M
【解决方法】
调高heap的最大值,即-XX:MaxPermSize的值调大。
另外,注意一点,Perm一般是在JVM启动时加载类进来,如果是JVM运行较长一段时间而不是刚启动后溢出的话,
很有可能是由于运行时有类被动态加载进来,此时建议用CMS策略中的类卸载配置。
如:-XX:+UseConcMarkSweepGC -XX:+CMSClassUnloadingEnabled

3
OOM for GC=>例如:java.lang.OutOfMemoryError: GC overheadlimit exceeded
【分析】
OOM是由于JVMGC时,对象过多,导致内存溢出,建议调整GC的策略,在一定比例下开始GC而不要使用默认的策略,或者将新代和老代设置合适的大小,
需要进行微调存活率。
【解决方法】
改变GC策略,在老代80%时就是开始GC,并且将-XX:SurvivorRatio-XX:SurvivorRatio=8)和-XX:NewRatio-XX:NewRatio=4)设置的更合理。

4
OOM for native thread created=>例如:java.lang.OutOfMemoryError: unable tocreate new native thread
【分析】
参考如下:
(MaxProcessMemory - JVMMemory - ReservedOsMemory) / (ThreadStackSize) = Numberof threads 
MaxProcessMemory  
指的是一个进程的最大内存
JVMMemory         JVM
内存
ReservedOsMemory  
保留的操作系统内存
ThreadStackSize     
线程栈的大小
如果JVM内存调的过大或者可利用率小于20%,可以建议将heapperm的最大值下调,并将线程栈调小,即-Xss调小,如:-Xss128k
【解决方法】
JVM内存不能调小的前提下,将-Xss设置较小,如:-Xss:128k

5OOM for allocate huge array=>例如:Exception in thread "main":java.lang.OutOfMemoryError: Requested array size exceeds VM limit 
【分析】
此类信息表明应用程序(或者被应用程序调用的APIs)试图分配一个大于堆大小的数组。例如,如果应用程序new一个数组对象,大小为512M,但是最大堆大小为256M,因此OutOfMemoryError会抛出,因为数组的大小超过虚拟机的限制。
【解决方法】
1)、首先检查heap-Xmx是不是设置的过小
2)、如果heap-Xmx已经足够大,那么请检查应用程序是不是存在bug,例如:应用程序可能在计算数组的大小时,存在算法错误,导致数组的size很大,从而导致巨大的数组被分配。


 6、 OOM for small swap=>例如:Exception in thread "main": java.lang.OutOfMemoryError:request <size> bytes for <reason>. Out of swap space? 
 【分析】
 抛出这类错误,是由于从native堆中分配内存失败,并且堆内存可能接近耗尽。这类错误可能跟应用程序没有关系,例如下面两种原因也会导致错误的发生:
(1)操作系统配置了较小的交换区
(2)系统的另外一个进程正在消耗所有的内存
 【解决方法】
(1)、检查os的swap是不是没有设置或者设置的过小
(2)、检查是否有其他进程在消耗大量的内存,从而导致当前的JVM内存不够分配。
注意:虽然有时<reason>部分显示导致OOM的原因,但大多数情况下,<reason>显示的是提示分配失败的源模块的名称,所以有必要查看日志文件,如crash时的hs文件。

 

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

java 关于FileReader和FileInputStream里的read()方法

JAVA文件读取FileReader

java字符型文件流 FileReader; FileWriter;

java字符型文件流 FileReader; FileWriter;

SonarLint 提示“关闭这个'FileReader'”,当我关闭时实际上在finally块中关闭了它

python中关于文件的操作