我写了以下代码:
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) 我怎么可以转换返回一个整数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)
我该怎么做才能读取实际数据?
当使用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) 我有一个文本文件(使用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行需要几秒钟.我显然做错了什么,但无法理解什么.在此先感谢您的帮助.
根据文档,BufferedReader(Reader)使用默认缓冲区大小,而第二个构造函数BufferedReader(Reader, int)允许设置缓冲区大小.
public BufferedReader(Reader in)
创建使用默认大小的输入缓冲区的缓冲字符输入流.
但是,文档并未提及默认缓冲区大小.
BufferedReader的默认缓冲区大小是多少?
我想要的是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) 我理解Scanner的优点,以及何时使用Scanner和BufferedReader.我读了一个不同的,但在一些类似的问题扫描仪与BufferedReader
当我从输入中读取时,为什么Scanner这么慢? 我认为它与扫描仪中有一个小缓冲区有关,但在这里我迷路了.最初的问题来自 Codechef,但我对该解决方案不感兴趣.
这是一个给定输入的代码示例:输入:
和代码
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) 我的任务是(有效地)通过一个非常大的,不断增长的文件逐行读取.这基本上就是我现在正在做的事情:
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将返回该行的第一部分,下一次调用将返回第二部分.但我真的需要这两个部分,我需要完整的线条.
更具体地说,当发生以下事件交错时,我的问题就出现了:
结果是每个readLine()获取写入过程输出的整行的一部分.它在执行此操作时表现得如此,因为每次调用它时,它都会到达文件的末尾,因此返回它已读取的内容.
基本上我需要的功能是BufferedReader,它先前返回null一个readLine; 一个在它之后有一个换行符之前不会给你一条线的东西,而不仅仅是它之后的EOF.因此,如果它找到EOF,它不返回到该点的行,它返回null,并在文件被写入后返回该行,并且在它之后有一个新行.
我可能通过更直接地处理FileReader并实质上重写BufferedReader来实现这样做的粗略方法,但我不知道如何有效地执行此操作.我的实现可能不会像真正的BufferedReader快,我想避免拖慢程序的时候,还有就是要读取的数据.
这段代码正在创建BufferedReader和InputStreamReader导致的内存泄漏问题,我认为可能会发生一些异常.我该怎么改变它?
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) 所以我在这里有一些代码,我不确定如果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块中抛出异常会发生什么的细节.
提前致谢.