在以下代码中使用StringReader周围的BufferedReader与仅使用StringReader之间有什么区别?通过在两个示例的第2行中加载DOM,似乎没有必要使用BufferedReader?
InputSource is = new InputSource(new StringReader(html));
Document dom = XMLResource.load(is).getDocument();
Run Code Online (Sandbox Code Playgroud)
VS
InputSource is = new InputSource(new BufferedReader(new StringReader(html)));
Document dom = XMLResource.load(is).getDocument();
Run Code Online (Sandbox Code Playgroud) 我正在尝试编写一个读取HTTP请求和响应并解析它们的类.由于标题是普通文本,因此使用BufferedReader和readLine方法读取它们似乎最容易.这显然不会对数据体造成影响,因为它可能是二进制的,所以我想在读取头文件后切换到读取原始字节.
现在,我正在做这样的事情:
InputStream input=socket.getInputStream();
BufferedReader reader=new BufferedReader(new InputStreamReader(input));
BufferedInputStream binstream=new BufferedInputStream(input);
Run Code Online (Sandbox Code Playgroud)
问题是BufferedReader在我有机会用binstream获取它之前正在预读并吞噬流中的所有二进制数据.
有没有办法阻止它在每次调用readLine时超出换行符读取?或者是否有更好的方法来读取原始二进制数据后的单行ASCII文本?
我正在逐行处理一些文本文件BufferReader.readlLine().
两个文件具有相同的大小130MB,但一个需要40秒才能处理,而其他文件需要75秒.
我注意到一个文件有180万行,而其他文件有210万行.但是,当我尝试处理具有相同大小的300万行的文件时,需要30分钟来处理.
所以我的问题是:
这种行为是因为寻求缓冲区读取器的时间(我想知道如何BufferedReader逐行工作或解析文件?)
有没有什么方法可以更快地逐行读取文件?
好的朋友,我提供更多细节.
我正在使用正则表达式将该行拆分为三个部分,然后使用SimpleUnsortedWriter(由Cassandra提供)我将其作为键,列和值写入某个文件.处理完16MB数据后,它会刷新到磁盘.
但是处理逻辑对于所有文件都是相同的,甚至一个大小为330MB的文件,但是在30秒内没有大约100万行的处理逻辑.可能是什么原因?
deviceWriter = new SSTableSimpleUnsortedWriter(
directory,
keyspace,
"Devices",
UTF8Type.instance,
null,
16);
Pattern pattern = Pattern.compile("[\\[,\\]]");
while ((line = br.readLine()) != null)
{
//split the line i n row column and value
long timestamp = System.currentTimeMillis() * 1000;
deviceWriter .newRow(bytes(rowKey));
deviceWriter .addColumn(bytes(colmName), bytes(value), timestamp);
}
Run Code Online (Sandbox Code Playgroud)
已经改变了,-Xmx256M to -Xmx 1024M但无论如何都没有帮助.
更新: 根据我的观察,当我写入缓冲区(在物理内存中)时,就像没有.写入缓冲区正在增加新的写入需要时间.(这是我的猜测)
请回复.
Reader rdr = new InputStreamReader(System.in);
BufferedReader br = new BufferedReader(rdr);
String s;
s = br.readLine();
br.close();
Scanner sc = new Scanner(System.in);
s = sc.nextLine();
System.out.print(s);
Run Code Online (Sandbox Code Playgroud)
我注意到,如果我关闭BufferedReader,我将无法再从键盘插入输入,因为System.in某种程度上是关闭的.无论如何我可以保留br.close()(我需要它来删除文件),然后从键盘添加更多输入?
使用BufferedReader时如何将String转换为int?据我所知,它的内容如下:
System.out.println("input a number");
int n=Integer.parseInt(br.readLine(System.in));
Run Code Online (Sandbox Code Playgroud)
但由于某种原因,它不起作用.
错误消息说:
找不到合适的方法 readLine(java.io.InputStream)
它也说不br.readLine适用
我有一个Java应用程序,已将json消息转换为拼花格式。是否有任何实木复合地板作家在Java中写入缓冲区或字节流?我看到的大多数示例仅适用于文件。
我试图/proc/net/xt_qtaguid/stats在Android 6中阅读.
使用cat命令,我得到这个:
2 a0 0 0 123456 311 48329 737 48 1
3 b0 0 0 0 0 0 0 0
4 c0 123456 311 48329 737 48 1
5 d0 111111 111 22222 222 33 1
Run Code Online (Sandbox Code Playgroud)
我的java代码尝试逐行读取文件:
File sysDataFile = new File(PATH_TO_FILE);
BufferedReader bufReader = null;
FileReader fileReader = null;
try {
fileReader = new FileReader(sysDataFile);
bufReader = new BufferedReader(fileReader);
String line = null;
while ((line = bufferedReader.readLine()) != null) {
// print to …Run Code Online (Sandbox Code Playgroud) 有没有办法让你BufferedReader.readLine()不挂?
我正在创建一个服务器:
如何在不运行的情况下检查客户端是否已提供任何输入readLine()?如果我运行readLine(),线程将挂起,直到输入传递?
这是我的方法
public void readFile3()throws IOException
{
try
{
FileReader fr = new FileReader(Path3);
BufferedReader br = new BufferedReader(fr);
String s = br.readLine();
int a =1;
while( a != 2)
{
s = br.readLine();
a ++;
}
Storage.add(s);
br.close();
}
catch(IOException e)
{
System.out.println(e.getMessage());
}
}
Run Code Online (Sandbox Code Playgroud)
由于某些原因,我无法读取仅包含以下文件:“名称为Intel(R)Core(TM)i5-2500 CPU @ 3.30GHz”
当我调试代码时,String s返回为“ \ ufffd \ ufffdN am e”,我不知道这些多余字符来自何处。.这使我无法正确读取文件。
我在AWS S3中有一个非常大的文件(几GB),我只需要文件中的少量行满足一定的条件.我不想将整个文件加载到内存中,然后搜索并打印这几行 - 这个内存负载太高了.正确的方法是只加载内存中需要的那些行.
根据AWS文档从文件中读取:
fullObject = s3Client.getObject(new GetObjectRequest(bucketName, key));
displayTextInputStream(fullObject.getObjectContent());
private static void displayTextInputStream(InputStream input) throws IOException {
// Read the text input stream one line at a time and display each line.
BufferedReader reader = new BufferedReader(new InputStreamReader(input));
String line = null;
while ((line = reader.readLine()) != null) {
System.out.println(line);
}
System.out.println();
}
Run Code Online (Sandbox Code Playgroud)
这里我们使用BufferedReader.我不清楚这里发生了什么.
我们每次读取新行时是否对S3进行网络调用,并且只将当前行保留在缓冲区中?或者是整个文件加载到内存中,然后由BufferedReader逐行读取?或者介于两者之间?
java inputstream bufferedinputstream amazon-s3 bufferedreader
bufferedreader ×10
java ×10
filereader ×2
inputstream ×2
amazon-s3 ×1
android ×1
http ×1
input ×1
java-io ×1
parquet ×1
readline ×1
seek ×1
string ×1
system.in ×1
xml ×1