标签: bufferedreader

从缓冲区读取时省略了换行符

我写了以下代码:

public class WriteToCharBuffer {

 public static void main(String[] args) {
  String text = "This is the data to write in buffer!\nThis is the second line\nThis is the third line";
  OutputStream buffer = writeToCharBuffer(text);
  readFromCharBuffer(buffer);
 }

 public static OutputStream writeToCharBuffer(String dataToWrite){
  ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
  BufferedWriter bufferedWriter = new BufferedWriter(new OutputStreamWriter(byteArrayOutputStream));
  try {
   bufferedWriter.write(dataToWrite);
   bufferedWriter.flush();
  } catch (IOException e) {
   e.printStackTrace();
  }
  return byteArrayOutputStream;
 }

 public static void readFromCharBuffer(OutputStream buffer){
  ByteArrayOutputStream byteArrayOutputStream = (ByteArrayOutputStream) buffer;
  BufferedReader bufferedReader = new …
Run Code Online (Sandbox Code Playgroud)

java bufferedreader linefeed

10
推荐指数
2
解决办法
3万
查看次数

获取BufferedReader中read()返回的字符

我怎么可以转换返回一个整数read()BufferedReader实际字符值,然后将其添加到一个字符串?将read()返回一个代表字读整数.当我这样做时,它不会将实际字符附加到String中.相反,它将整数表示本身附加到String.

int c;
String result = "";

while ((c = bufferedReader.read()) != -1) {
    //Since c is an integer, how can I get the value read by incoming.read() from here?
    response += c;   //This appends the integer read from incoming.read() to the String. I wanted the character read, not the integer representation
}
Run Code Online (Sandbox Code Playgroud)

我该怎么做才能读取实际数据?

java bufferedreader

10
推荐指数
2
解决办法
4万
查看次数

BufferedReader readLine()块

当使用readLine()接收数据时,即使我在发送消息时使用.flush在消息末尾添加了"\n",但读取我的消息的while循环仍会阻塞.只有在关闭套接字连接时,才会离开循环.

这是客户端代码:

bos = new BufferedOutputStream(socket.
            getOutputStream());
bis = new BufferedInputStream(socket.
            getInputStream());
osw = new OutputStreamWriter(bos, "UTF-8");
osw.write(REG_CMD + "\n");
osw.flush();

isr = new InputStreamReader(bis, "UTF-8");
BufferedReader br = new BufferedReader(isr);

String response = "";
String line;

while((line = br.readLine()) != null){
   response += line;
}
Run Code Online (Sandbox Code Playgroud)

和服务器的代码:

BufferedInputStream is;
BufferedOutputStream os;

is = new BufferedInputStream(connection.getInputStream());
os = new BufferedOutputStream(connection.getOutputStream());

isr = new InputStreamReader(is);

String query= "";
String line;

while((line = br.readLine()) != null){
   query+= line;
}

String response = executeMyQuery(query); …
Run Code Online (Sandbox Code Playgroud)

java sockets bufferedreader

10
推荐指数
2
解决办法
4万
查看次数

Java读取长文本文件非常慢

我有一个文本文件(使用XStream创建的XML),长度为63000行(3.5 MB).我正在尝试使用Buffered reader阅读它:

                BufferedReader br = new BufferedReader(new FileReader(file));
                try {
                    String s = "";
                    String tempString;
                    int i = 0;
                    while ((tempString = br.readLine()) != null) {
                        s = s.concat(tempString);
//                        s=s+tempString;
                        i = i + 1;
                        if (i % 1000 == 0) {
                            System.out.println(Integer.toString(i));
                        }
                    }
                    br.close();
Run Code Online (Sandbox Code Playgroud)

在这里,您可以看到我尝试测量阅读速度.它非常低.在10000行之后读取1000行需要几秒钟.我显然做错了什么,但无法理解什么.在此先感谢您的帮助.

java file-io file-read bufferedreader

10
推荐指数
1
解决办法
4279
查看次数

BufferedReader默认缓冲区大小?

根据文档,BufferedReader(Reader)使用默认缓冲区大小,而第二个构造函数BufferedReader(Reader, int)允许设置缓冲区大小.

public BufferedReader(Reader in)

创建使用默认大小的输入缓冲区的缓冲字符输入流.

但是,文档并未提及默认缓冲区大小.

BufferedReader的默认缓冲区大小是多少?

java buffer bufferedreader

10
推荐指数
1
解决办法
2万
查看次数

文件结尾NullPointerException

我想要的是EOF通过从控制台读取命令行键入Ctrl+ 来达到.以下代码执行此操作.但问题是,它在达成后发出.有没有办法跳过这个例外?或者更准确地说,什么是达到适当的方式与从控制台读取?zBufferedReaderNullPointerExceptionEOFEOFBufferedReader

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

class EOF {

    public static void main(String args[]) {
        String s = "";
        String EOF = "^z";
        BufferedReader read = new BufferedReader(new InputStreamReader(System.in));
        try {
            while (!s.equals(EOF)) {
                s = read.readLine();   
            }
        } catch (IOException e) {} 
    }

}
Run Code Online (Sandbox Code Playgroud)

java nullpointerexception eof bufferedreader

10
推荐指数
1
解决办法
1418
查看次数

从输入读取时,为什么Scanner比BufferedReader慢?

我理解Scanner的优点,以及何时使用Scanner和BufferedReader.我读了一个不同的,但在一些类似的问题扫描仪与BufferedReader

当我从输入中读取时,为什么Scanner这么慢? 我认为它与扫描仪中有一个小缓冲区有关,但在这里我迷路了.最初的问题来自 Codechef,但我对该解决方案不感兴趣.

这是一个给定输入的代码示例:输入:

  • 7 3
  • 1
  • 51
  • 966369
  • 7
  • 9
  • 999996
  • 1

和代码

import java.io.BufferedReader;
import java.io.InputStreamReader;

public class Main {

    public static void main(String[] args) throws Exception {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String[] s = br.readLine().split(" "); 
        int numberOfLines = Integer.parseInt(s[0]);
        int divideNumber = Integer.parseInt(s[1]);
        int count = 0;

        for (int i = 0; i < numberOfLines; i++) {
            String number = br.readLine();
            if (number.length() < 11) {
                int num = Integer.parseInt(number);
                if …
Run Code Online (Sandbox Code Playgroud)

java bufferedreader java.util.scanner

10
推荐指数
1
解决办法
3973
查看次数

使用BufferedReader从大型不断增长的文件中读取

我的任务是(有效地)通过一个非常大的,不断增长的文件逐行读取.这基本上就是我现在正在做的事情:

BufferedReader rd = //initialize BufferedReader
String line;
while(true){
    while((line=rd.readLine())==null){
        try{
            Thread.sleep(1000);
        }catch(InterruptedException e){
            //handle exception
        }
    }
    //process line
}
Run Code Online (Sandbox Code Playgroud)

所以我的BufferedReader只是挂在文件的末尾,直到有更多东西要读.这很好用,但是有一个问题 - 如果在写入文件的过程正在写一行的过程中调用readLine.然后第一次调用readLine将返回该行的第一部分,下一次调用将返回第二部分.但我真的需要这两个部分,我需要完整的线条.

更具体地说,当发生以下事件交错时,我的问题就出现了:

  1. 写入过程会写入大部分内容
  2. readLine()被调用
  3. 编写过程完成该行并添加换行符
  4. readLine()被调用

结果是每个readLine()获取写入过程输出的整行的一部分.它在执行此操作时表现得如此,因为每次调用它时,它都会到达文件的末尾,因此返回它已读取的内容.

基本上我需要的功能是BufferedReader,它先前返回null一个readLine; 一个在它之后有一个换行符之前不会给你一条线的东西,而不仅仅是它之后的EOF.因此,如果它找到EOF,它不返回到该点的行,它返回null,并在文件被写入后返回该行,并且在它之后有一个新行.

我可能通过更直接地处理FileReader并实质上重写BufferedReader来实现这样做的粗略方法,但我不知道如何有效地执行此操作.我的实现可能不会像真正的BufferedReader快,我想避免拖慢程序的时候,还有就是要读取的数据.

java file large-files bufferedreader

9
推荐指数
1
解决办法
4016
查看次数

关闭BufferedReader和InputStreamReader

这段代码正在创建BufferedReaderInputStreamReader导致的内存泄漏问题,我认为可能会发生一些异常.我该怎么改变它?

try{
    URL url = new URL(sMyUrl);
    BufferedReader in = new BufferedReader(new InputStreamReader(url.openStream()));
    while ((str = in.readLine()) != null) {
        jsonString += str;
    }
    in.close();
}catch(Exception e){

}
Run Code Online (Sandbox Code Playgroud)

java bufferedreader inputstreamreader

9
推荐指数
2
解决办法
4万
查看次数

如果在finally块中抛出异常,最终是否完全执行

所以我在这里有一些代码,我不确定如果reader.close()方法抛出异常,它会如何反应.

public void someMethod(String s) throws IOException{
   BufferedReader reader = Files.newBufferedReader(filePath,cs);
   listRWLock.readLock().lock();
   try{
     //miscellaneous code involving reading
   }finally{
     reader.close()
     listRWLock.readLock().unlock()
   }
}
Run Code Online (Sandbox Code Playgroud)

ListRWLock是一个ReentrantReadWriteLock.如果reader.close()方法抛出异常,那么它之后的语句是否会无法执行?我已经尝试搜索这个主题了,虽然我已经得到了一些关于在return语句中最终执行的东西,但是我还没有设法找到如果在finally块中抛出异常会发生什么的细节.

提前致谢.

java exception finally bufferedreader

9
推荐指数
1
解决办法
2764
查看次数