Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/373.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 是否可以将BufferedWriter的内容作为字符串获取?_Java_String_Amazon S3_Bufferedwriter - Fatal编程技术网

Java 是否可以将BufferedWriter的内容作为字符串获取?

Java 是否可以将BufferedWriter的内容作为字符串获取?,java,string,amazon-s3,bufferedwriter,Java,String,Amazon S3,Bufferedwriter,因此,我们有一些操作,它们使用BufferedWriter在服务器上写入文件。在刷新BufferedWriter之前,我想将内容上传到S3 bucket。目前(不恰当地)我正在收集BufferedWriter使用StringBuilder编写的每个字符串(每次都追加),但这是一个巨大的字符串(~150mb)。因此,最好只直接写入BufferedWriter中存储的内容。我一直在网上搜索,但我找不到这个问题的确切答案 这是可能的,而且代码很少吗?一个BufferedWriter只不过是其他编写器的

因此,我们有一些操作,它们使用BufferedWriter在服务器上写入文件。在刷新BufferedWriter之前,我想将内容上传到S3 bucket。目前(不恰当地)我正在收集BufferedWriter使用StringBuilder编写的每个字符串(每次都追加),但这是一个巨大的字符串(~150mb)。因此,最好只直接写入BufferedWriter中存储的内容。我一直在网上搜索,但我找不到这个问题的确切答案


这是可能的,而且代码很少吗?

一个
BufferedWriter
只不过是其他
编写器的包装器。因此,它将取决于传递给其构造函数的
编写器的类型


支持回读功能的
Writer
类型包括和,允许您分别以
char[]
String
的形式读取内容。

您将BufferedWriter用作缓存,缓存整个流,然后将其写入两个位置

我使用的是一个MemFile类,它在内存中存储流的效率比StringBuilder或ByteArrayOutputStream要高得多,因为它不必在单个连续块中分配内存

此类可在以下位置获得开放源代码:

这些方法存在:

java.io.Reader  getReader();
java.io.Writer  getWriter();
void            outToWriter(java.io.Writer w);
实例化该类,获取一个编写器,然后写入它。一旦它充满了内容,使用outToWriter首先流式传输到S3,然后使用另一个编写器流式传输到文件。如果方便的话,也可以使用阅读器

这个问题提到了面向字符的编写器,但是如果您真的想使用字节,那么也有字节流方法

文件载于:

是否可以将
BufferedWriter
的内容作为
字符串获取

不,这是不可能的

BufferedWriter
仅保存已写入数据的“一个缓冲区已满”。这还不足以满足你的需要。其余的数据将被写入该文件,并且在内存中不再可用。(此外,编写器的缓冲区故意隐藏在抽象层后面,如果不进行“讨厌的”反射,您将无法获得它。)

现在,您可以向输出堆栈添加一个或多个额外组件,以在内存中捕获输出。例如,您可以使用Apache
TeeOutputStream
类()拆分数据,并将第二个副本写入
ByteArrayOutputStream
。或者,您可以将第二个副本直接写入S3输出流

另一种方法是通过tearrayoutputstream“接收”要写入
的数据,提取字节数组并将其写入文件一次,第二次写入流到S3存储桶


如果文件可能很大,最好避免将整个文件内容保存在内存中

为什么不同时写入文件和S3?您可以将
BufferedWriter
包装在
StringWriter
周围。不幸的是,文件是按顺序写入服务器位置的,而且S3不允许附加到对象,我必须等到文件完全写入后再上传到S3。使用FilterWriter。实现“write”方法来执行您想要执行的操作,然后调用相应的“out.write”方法。为什么要在BufferedWriter完成其工作之前(即关闭编写器之前)上载内容?