有没有办法用BufferedReader读取ByteBuffer而不必先将它变成String?我想通过相当大的ByteBuffer读取文本行,出于性能原因,我想避免将其写入磁盘.在ByteBuffer上调用toString不起作用,因为生成的String太大(它会抛出java.lang.OutOfMemoryError:Java堆空间).我原以为API中会有一些东西将ByteBuffer包装在合适的阅读器中,但我似乎找不到合适的东西.
这是一个缩写代码示例,说明了我在做什么):
// input stream is from Process getInputStream()
public String read(InputStream istream)
{
ReadableByteChannel source = Channels.newChannel(istream);
ByteArrayOutputStream ostream = new ByteArrayOutputStream(bufferSize);
WritableByteChannel destination = Channels.newChannel(ostream);
ByteBuffer buffer = ByteBuffer.allocateDirect(writeBufferSize);
while (source.read(buffer) != -1)
{
buffer.flip();
while (buffer.hasRemaining())
{
destination.write(buffer);
}
buffer.clear();
}
// this data can be up to 150 MB.. won't fit in a String.
result = ostream.toString();
source.close();
destination.close();
return result;
}
// after the process is run, we call this method with the String
public …Run Code Online (Sandbox Code Playgroud) 如何将字符串的ArrayList转换为BufferedReader?我愿意将ArrayList作为输入流,但我想要一种简单的方法将字符串添加到最终将被BufferedReader捕获的数据结构中.
如何以最有效的方式读取正在运行的进程的输出
让我解释一下我想要实现的目标.
我试图通过手机上的应用程序读取logcat
我想让logcat中的任何更新立即反映出来并且应用程序是高效的,比如减少电池消耗.
我需要读取文本文件的前n行作为行(每行可能包含或不包含空格).文本文件的其余部分包含未知数量N的以空格分隔的标记(分隔符是空格,制表符和换行符的混合,所有这些都被视为与分隔符完全相同).
我知道如何使用BufferedReader读取行.我知道如何使用Scanner读取令牌.但是,如何以上述方式将这两种不同的阅读模式组合成单个文本文件?
我目前正在读一String从BufferedReader,但无法找到一个方法来做到这一点?
我当然试过了
BufferedReader inStream = null;
inStream = new BufferedReader(new InputStreamReader(client.getInputStream()));
String test = inStream.readLine();
Run Code Online (Sandbox Code Playgroud)
但是,当尝试打印到屏幕时,结果结果为null,即使BufferedReader inStream它等于某种消息.
如何在不使用RandomAccessFile的情况下从文件中读取最后n个字节数.
我的文件中的最后6个字节包含重写文件时的重要信息.我需要编写原始文件,然后将最后6个字节附加到别处.
任何指导?谢谢
BufferedReader#readLine()尝试用8192字节填充其缓冲区.如果行本身的大小比这大得多,它会抛出异常还是以块的形式读取并打印整行?
可以?或者也许只有单独的字符串放在每个readline()上,并且最大的内存空间是最长字符串的音量?
我正在使用以下代码读取大文件:
InputStreamReader isr = new InputStreamReader(new FileInputStream(FilePath));
BufferedReader br = new BufferedReader(isr);
while ((cur = br.readLine()) != null)
Run Code Online (Sandbox Code Playgroud)
我可以使用上述代码读取大文件,但我想知道这些读取器在内存中的内部工作方式。inputstreamreader扮演什么角色?逐行读取文件(例如2 GB)时分配了多少块内存?
在Kotlin中,可能会有多种方式读取纯文本文件。
我想知道什么是可能的方式以及如何使用它们。
bufferedreader ×10
java ×8
file ×3
string ×2
android ×1
byte ×1
bytebuffer ×1
file-io ×1
inputstream ×1
io ×1
kotlin ×1
logcat ×1
nio ×1
text-files ×1