据我所知,从Java文件中读取基于字符的数据的两种最常用的方法是使用Scanner或BufferedReader.我也知道BufferedReader通过使用缓冲区来有效地读取文件以避免物理磁盘操作.我的问题是:
Scanner执行以及BufferedReader?Scanner,BufferedReader反之亦然?我正在使用围绕FileReader的BufferedReader读取本地文件:
BufferedReader reader = new BufferedReader(new FileReader(fileName));
// read the file
// (error handling snipped)
reader.close();
Run Code Online (Sandbox Code Playgroud)
我需要close()的FileReader为好,或将包装处理这个问题?我见过人们这样做的代码:
FileReader fReader = new FileReader(fileName);
BufferedReader bReader = new BufferedReader(fReader);
// read the file
// (error handling snipped)
bReader.close();
fReader.close();
Run Code Online (Sandbox Code Playgroud)
从servlet调用此方法,我想确保不打开任何句柄.
我正在为我正在制作的Android应用程序的网站发出HTTP get请求.
我正在使用DefaultHttpClient并使用HttpGet发出请求.我得到实体响应,从中获取一个InputStream对象来获取页面的html.
然后我循环完成回复,如下所示:
BufferedReader r = new BufferedReader(new InputStreamReader(inputStream));
String x = "";
x = r.readLine();
String total = "";
while(x!= null){
total += x;
x = r.readLine();
}
Run Code Online (Sandbox Code Playgroud)
然而,这非常缓慢.
这效率低吗?我没有加载一个大的网页 - www.cokezone.co.uk所以文件大小不大.有一个更好的方法吗?
谢谢
安迪
我正在尝试使用Android中assets目录中的InputStream逐行读取文本文件.
我想将InputStream转换为BufferedReader以便能够使用readLine().
我有以下代码:
InputStream is;
is = myContext.getAssets().open ("file.txt");
BufferedReader br = new BufferedReader (is);
Run Code Online (Sandbox Code Playgroud)
第三行删除以下错误:
Multiple markers at this line The constructor BufferedReader (InputStream) is undefinded.
我在C中尝试做的事情如下:
StreamReader file;
file = File.OpenText ("file.txt");
line = file.ReadLine();
line = file.ReadLine();
...
Run Code Online (Sandbox Code Playgroud)
我做错了什么或我应该怎么做?谢谢!
请查看下面的代码:
// A.class
File file = new File("blah.txt");
FileWriter fileWriter = new FileWriter(file);
PrintWriter printWriter = new PrintWriter(fileWriter);
// B.class
File file = new File("blah.txt");
FileWriter fileWriter = new FileWriter(file);
BufferedWriter bWriter = new BufferedWriter(fileWriter);
Run Code Online (Sandbox Code Playgroud)
这两种方法有什么区别?
什么时候应该在BufferedWriter上使用PrintWriter?
我刚刚学习了输入/输出BufferedReader.
我想知道究竟是什么术语的含义Stream和Buffer?
这行代码还为我们提供了什么:
BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
Run Code Online (Sandbox Code Playgroud) 我想知道BufferedReader和之间的具体区别FileReader.
我知道这样做BufferedReader效率要高得多FileReader,但是有人可以解释一下原因(具体而且详细)吗?谢谢.
对不起,如果这是一个显而易见的问题,但我似乎无法得到它.我正在为数据结构课程分配工作.它涉及从简单的.dat文件中提取数据.我们之前从未使用过Java中的任何文件访问选项,所以教授只是给了我们这篇文章的工作代码.因此,一个名为'FileReadExample'的类创建一个新的缓冲读取器对象,打开一个文件,然后应该发出一堆关于该文件的数据.但我根本无法访问任何数据.在一个单独的testMain文件中,我创建了一个名为fr的新FileReadExample对象,然后尝试从那里打印出像fr.readLine()这样的东西,但它告诉我没有这样的方法.我敢肯定我错过了一些非常容易的东西.
编辑 - 教授代码:
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
public class FileReadExample
{
public static void main(String[] args)
{
System.out.println("got here");
try
{
BufferedReader in = new BufferedReader(new FileReader(new File("sample-file.dat")));
System.out.println("File open successful!");
int line = 0;
for (String x = in.readLine(); x != null; x = in.readLine())
{
line++;
System.out.println(x);
if (line <= 3)
{
String[] tokens = x.split(" ");
System.out.println("Number of tokens in line " + line + ": " + tokens.length);
System.out.println("The tokens are:"); …Run Code Online (Sandbox Code Playgroud) 我需要一次读取一个文件,我正在使用该read()方法BufferedReader.*
我发现这read()比约慢10倍readLine().这是预期的吗?或者我做错了什么?
这是Java 7的基准测试.输入测试文件大约有500万行和2.54亿个字符(~242 MB)**:
该read()方法需要大约7000毫秒来读取所有字符:
@Test
public void testRead() throws IOException, UnindexableFastaFileException{
BufferedReader fa= new BufferedReader(new FileReader(new File("chr1.fa")));
long t0= System.currentTimeMillis();
int c;
while( (c = fa.read()) != -1 ){
//
}
long t1= System.currentTimeMillis();
System.err.println(t1-t0); // ~ 7000 ms
}
Run Code Online (Sandbox Code Playgroud)
该readLine()方法只需约700毫秒:
@Test
public void testReadLine() throws IOException{
BufferedReader fa= new BufferedReader(new FileReader(new File("chr1.fa")));
String line;
long t0= System.currentTimeMillis();
while( (line = fa.readLine()) != null ){
// …Run Code Online (Sandbox Code Playgroud) 我想优化这段代码:
InputStream is = rp.getEntity().getContent();
BufferedReader reader = new BufferedReader(new InputStreamReader(is));
String text = "";
String aux = "";
while ((aux = reader.readLine()) != null) {
text += aux;
}
Run Code Online (Sandbox Code Playgroud)
问题是我不知道如何读取bufferedreader的内容并以比我上面更快的方式将其复制到String中.我需要花费尽可能少的时间.谢谢
bufferedreader ×10
java ×10
filereader ×3
android ×2
stream ×2
benchmarking ×1
buffer ×1
file ×1
file-io ×1
input ×1
inputstream ×1
io ×1
optimization ×1
readline ×1