我正在使用BufferedReader.readLine()方法从远程服务器读取响应(用C语言编写,我无法访问源代码).
BufferedReader br = new BufferedReader(new InputStreamReader(in));
String line;
while((line = br.readLine())!=null){
[...]
}
Run Code Online (Sandbox Code Playgroud)
但它总是阻塞在最后一行,直到它超时.所以我使用了以下代码:
int b;
while(true){
b = in.read;
[...]
}
Run Code Online (Sandbox Code Playgroud)
我发现读取的最后一个字节的整数值为13,我认为这是一个回车,对吧?
那么为什么readLine方法会阻塞?服务器通常如何发出信号流结束信号?谢谢.
我正在尝试读取将包含在.JAR中的资源,但我得到以下的nullPointer:
bReader = new BufferedReader(new InputStreamReader(
this.getClass().getResourceAsStream("resources/" + fileName)));
Run Code Online (Sandbox Code Playgroud)
然而,使用文件,工作正常..
bReader = new BufferedReader(new FileReader(new File("resources/" + fileName)));
Run Code Online (Sandbox Code Playgroud) 任何人都可以解释我的类之间的区别BufferedReader,FileReader以及Scanner?当我想阅读文本文件时使用哪一个?
我有一个片段如下:
Process proc = Runtime.getRuntime().exec(command);
BufferedReader br = new BufferedReader(new InputStreamReader(proc.getErrorStream()));
String line = br.readLine();
Run Code Online (Sandbox Code Playgroud)
现在在上面的代码中我确信该进程将始终具有在线输入,因此我没有使用任何类型的while循环或任何空检查.问题是readLine块.我知道的一个原因是,流没有数据要读取,因此readLine一直在等待.为了检查这一点,我删除了readLine并使用了read()函数,如下所示:
Process proc = Runtime.getRuntime().exec( command );
BufferedReader br = new BufferedReader(new InputStreamReader(proc.getErrorStream()));
int a;
while((a=br.read())!=-1){
char ch = (char) a;
if(ch == '\n')
System.out.print("New line "+ch);
if(ch == '\r')
System.out.print("Carriage return "+ch);
System.out.print(ch);
}
Run Code Online (Sandbox Code Playgroud)
令我惊讶的是,这段代码工作并打印出麻烦的新行和回车.现在我想知道为什么readLine块?数据可用,它由换行符终止.还有什么可能的原因?
注意:以上工作偶尔一次!也许一次超过15次.
注意:我也尝试使用ProcessBuilder,但行为相同.
更新:所以我切换到ProcessBuilder,然后我重定向了errorStream,现在当我执行process.getInputStream时,我立刻得到输入流和错误流,这很好.以下是片段.
ProcessBuilder pb = new ProcessBuilder(command.split(" "));
pb..redirectErrorStream(true);
Process proc = pb.start();
BufferedReader br = new BufferedReader(new InputStreamReader(proc.getInputStream()));
String line = br.readLine();
//Now I get both input …Run Code Online (Sandbox Code Playgroud) 1)缓冲流如何在后台工作,它们与普通流有什么不同?使用它们的优点是什么?
2)DataInputStream也是以字节为基础的.但它有方法readLine().这里有什么意义?
我正在使用BufferedReader构造函数来创建现有的新副本BufferedReader.
BufferedReader buffReader = new BufferedReader(originalBuffReader);
Run Code Online (Sandbox Code Playgroud)
新buffReader的工作正常,但是当我这样做时,originalBuffReader.readLine()它给了我null.有没有其他方法我可以在bufferReader不影响我原创的情况下制作新作品BufferedReader.
仅供参考:我将bufferReader作为我方法的输入; 而我无权访问该来源.
Python 3.我正在使用QT的文件对话框小部件来保存从互联网下载的PDF.我一直在使用'open'读取文件,并尝试使用文件对话框小部件来编写它.但是,我一直遇到"TypeError:'_ io.BufferedReader'不支持缓冲区接口"错误.
示例代码:
with open('file_to_read.pdf', 'rb') as f1:
with open('file_to_save.pdf', 'wb') as f2:
f2.write(f1)
Run Code Online (Sandbox Code Playgroud)
当不使用'b'指示符时,或者当从web读取文件时,这种逻辑适用于文本文件,例如urllib或者请求.这些是"字节"类型,我认为我需要打开文件.相反,它作为缓冲读者开放.我尝试了字节(f1),但得到"TypeError:'bytes'对象不能被解释为整数." 有什么想法吗?
如果我的代码中有这样的东西:
String line = r.readLine(); //Where r is a bufferedReader
Run Code Online (Sandbox Code Playgroud)
如果下一行是文件的结尾,我该如何避免崩溃?(即null)
我需要阅读下一行,因为可能有一些我需要处理的东西,但如果没有代码只是崩溃.
如果有什么东西那么一切都没问题,但我无法保证那里会有东西.
所以,如果我做了类似的事情:(伪代码):
if (r.readLine is null)
//End code
else {check line again and excecute code depending on what the next line is}
Run Code Online (Sandbox Code Playgroud)
我遇到类似这样的问题是,当我检查该行反对null时,它已经移动到下一行,所以我该如何再次检查它?
我没有找到办法做到这一点 - 任何建议都会有很大的帮助.
我怎么可以转换返回一个整数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)
我该怎么做才能读取实际数据?
根据文档,BufferedReader(Reader)使用默认缓冲区大小,而第二个构造函数BufferedReader(Reader, int)允许设置缓冲区大小.
public BufferedReader(Reader in)
创建使用默认大小的输入缓冲区的缓冲字符输入流.
但是,文档并未提及默认缓冲区大小.
BufferedReader的默认缓冲区大小是多少?
bufferedreader ×10
java ×9
buffer ×2
io ×2
java-io ×2
file-io ×1
filereader ×1
jar ×1
python ×1
python-3.x ×1
readline ×1
resources ×1
sockets ×1
stream ×1