如果我只是close()在输出流中调用,输出是保证的,还是需要我flush()总是调用?
我在try/catch块中有以下代码段
InputStream inputstream = conn.getInputStream();
InputStreamReader inputstreamreader = new InputStreamReader(inputstream);
BufferedReader bufferedreader = new BufferedReader(inputstreamreader);
Run Code Online (Sandbox Code Playgroud)
我的问题是,当我必须关闭finally块中的这些流时,是否必须关闭所有3个流,或者只是关闭befferedreader将关闭所有其他流?
InputStream in = SomeClass.getInputStream(...);
BufferedInputStream bis = new BufferedInputStream(in);
try {
// read data from bis
} finally {
bis.close();
in.close();
}
Run Code Online (Sandbox Code Playgroud)
javadoc for BufferedInputStream.close()未提及底层流是否已关闭:
关闭此输入流并释放与该流关联的所有系统资源.关闭流后,进一步的read(),available(),reset()或skip()调用将抛出IOException.关闭先前关闭的流无效.
显式调用是in.close()必要的,还是应该通过调用来关闭bis.close()?
我有下面的代码,它只是从文件夹中读取所有文件.此文件夹中有20,000个文件.该代码在本地文件夹(d:/files)上运行良好,但//robot/files在读取大约1,000 - 2,000个文件后在网络路径()上失败.
更新:文件夹是彼此的副本.
是什么导致这个问题以及如何解决它?
package cef_debug;
import java.io.*;
public class Main {
public static void main(String[] args) throws Throwable {
String folder = args[0];
File[] files = (new File(folder)).listFiles();
String line;
for (int i = 0; i < files.length; i++) {
BufferedReader br = new BufferedReader(new FileReader(files[i]));
while ((line = br.readLine()) != null) {
}
br.close();
}
}
}
Run Code Online (Sandbox Code Playgroud)
从网络路径(//robot/files)读取时出现以下错误:
Exception in thread "main" java.io.IOException: Too many open files
at java.io.FileInputStream.open(Native Method) …Run Code Online (Sandbox Code Playgroud) 我有三个问题.
为了解释,我正在审查某人的代码,并注意到BufferedReader有时候没有关闭.通常,Eclipse会发出警告,这是一个潜在的内存泄漏(我修复了它).但是,在Callable内部类中,没有警告.
class outerClass {
...
public void someMethod() {
Future<Integer> future = outputThreadPool.submit(new innerClass(this.myProcess.getInputStream(), threadName));
...
}
class innerClass implements Callable<Integer> {
private final InputStream stream;
private final String prepend;
innerClass(InputStream stream, String prepend) {
this.stream = stream;
this.prepend = prepend;
}
@Override
public Integer call() {
BufferedReader stdOut = new BufferedReader(new InputStreamReader(stream));
String output = null;
try {
while ((output = stdOut.readLine()) != null) {
log.info("[" + prepend + "] " + output);
}
} catch …Run Code Online (Sandbox Code Playgroud) 我有以下Java代码,它遍历目录中的所有文件并删除它们.
for(File file : tmpDir.listFiles())
{
file.delete();
}
Run Code Online (Sandbox Code Playgroud)
但它不会删除所有文件.当我这样做时,一些,通常是20到30,中有几千.是否有可能解决这个问题,或者我偶然发现了一些最好独自留下的Java巫毒?
我试图从
http://www.roseindia.net/java/beginners/java-read-file-line-by-line.shtml
中举例说明BufferReader未关闭是否需要关闭BufferReader或不关闭?请解释.
FileInputStream fstream = new FileInputStream("textfile.txt");
BufferedReader br = new BufferedReader(new InputStreamReader(fstream));
String strLine;
//Read File Line By Line
while ((strLine = br.readLine()) != null) {
// Print the content on the console
System.out.println (strLine);
}
//Close the input stream
in.close();
Run Code Online (Sandbox Code Playgroud)