我有一个将数据写入 OutputStream 但需要将 OutputStream 的内容作为 InputStream 返回的方法
public InputStream getInputStreamOfData(type param) {
// ..... data
OutputStreamWriter writer = new OutputStreamWriter();
writer.write(data);
// convert writer object to an InputStream
}
Run Code Online (Sandbox Code Playgroud)
我遇到了一些库来执行此操作,例如 IOUtils 和其他基于线程的方法。有没有一种简单的方法可以使用标准 Java 库来实现这一点?我想将编写器中的内容作为 InputStream 返回以供调用方法使用。
谢谢!
我基于HttpListener编写Web服务器代码,但经常出现这样的异常
“System.Net.ProtocolViolationException:要写入流的字节超出指定的 Content-Length 字节大小”。
示例代码:
context.Response.Output = System.Text.Encoding.UTF8.GetBytes("xxx");
if (context.Response.Output != null && context.Response.Output.Length > 0)
{
context.Response.ContentLength64 = context.Response.Output.Length;
using (var stream = context.Response.OutputStream)
{
stream.Write(context.Response.Output, 0, context.Response.Output.Length);
}
}
Run Code Online (Sandbox Code Playgroud)
并非每次请求都会出现此异常。谁能告诉我怎么解决。谢谢!
我在某个地方读到了让我不确定并寻找替代方法的地方。呼叫reset()过于频繁是否会导致网络紧张,或者对此没有必要?
我正在通过 ObjectOutputStream 使用 TCP 发送一个对象。对象值在再次写入之前已更改。现在是同一个对象但包含不同的值,没有reset()它重新发送之前发送的缓存对象的引用,该引用被读取为没有更改。reset()由于这种压力,我不确定使用是否是一个好主意。我应该寻找另一种方式吗?
示例代码如下:
Socket socket = new Socket(ip, port);
BufferedOutputStream bos = new BufferedOutputStream(socket.getOutputStream());
ObjectOutputStream oos = new ObjectOutputStream(bos);
while(true){
oos.writeObject(object);
oos.flush();
oos.reset();
object.x++;
}
Run Code Online (Sandbox Code Playgroud) 我正在使用一个 java 库并想调用一个导出数据的方法。
此方法有两种变体:一种具有用作目标文件名的 String 参数,另一种接受 OutputStream 对象并使用 OutputStreamWriter 写入该对象。
我想使用第二种方法并且能够将 OutputStream 返回到一个字符串中,这样我就可以用它做任何我想做的事情。
我不确定它实际上是否可行,但是当我发现 clojure.core/with-out-str 我有一些希望它是可能的,但是我不确定如何使用它。
是否可以将 OutputStream 参数从 Clojure 传递给 Java 方法并将写入的数据作为字符串取回?
谢谢。
编辑:
实际上,类构造函数接受一个 OutputStream 参数,一个方法通过它写入并关闭它。希望这可以帮助。
所以我查了这个问题并尝试过,但没有成功。
我的代码应该测试该方法是否通过使用Streams.
ByteArrayOutputStream outStream = new ByteArrayOutputStream();
PrintStream myStream = new PrintStream(outStream);
System.setOut(myStream);
o.doSomething(); //printing out Hi
System.out.flush();
System.setOut(savedOldStream);//setting it back to System.out
assertEquals(outStream.toString(),"Hi");
Run Code Online (Sandbox Code Playgroud)
但是每次我运行 JUnit 时它都会失败。我也试过:assertTrue(outStream.toString().equals("Hi"));但这也不起作用。
这是 doSomething() 方法:
public void doSomething () {
System.out.println("Hi");
}
Run Code Online (Sandbox Code Playgroud) 我有一个输出流,客户端 A 正在写入,我需要将它以字节块的形式转发到客户端 B。
我想将客户端 A 的输出流与客户端 B 的输出流连接起来。这可能吗?有什么方法可以做到这一点?我不需要分叉/克隆我而是需要从流 A 中获取一些数据并将其移动到流 B(即数据不留在流 A 中)
注意:A 和 B 是进程,客户端 A 的输出流不能直接提供给客户端 B。 约束:内存有限
我正在尝试将 StreamingOutput 转换为 Java 中的字符串以将其传递给另一种方法。它生成字符串,但稍后会引发以下错误。
JAXRSUtils logMessageHandlerProblem 严重:写入数据有问题,ContentType:text/plain
发生了什么?
StreamingOutput stream = method1();
ByteArrayOutputStream output = new ByteArrayOutputStream();
stream.write(output);
String string = new String(output.toString("UTF-8"));
...
public StreamingOutput method1(...){..}
Run Code Online (Sandbox Code Playgroud)
`
我试图在下一个选项卡中打开 pdf 文件,它打开但始终为空白。我正在从 springboot 中的文件夹中调用 pdf 文件。数据确实显示在控制台日志中。
弹簧代码:
@RequestMapping(value = "/report", method = RequestMethod.GET)
void getFile(HttpServletResponse response) throws IOException {
String fileName = "test123.pdf";
String path = "TrainingDocuments/SuperPartnerUser/" + fileName;
File file = new File(path);
FileInputStream inputStream = new FileInputStream(file);
response.setContentType("application/pdf");
response.setContentLength((int) file.length());
response.setHeader("Content-Disposition", "inline;filename=\"" + fileName + "\"");
FileCopyUtils.copy(inputStream, response.getOutputStream());
}
Run Code Online (Sandbox Code Playgroud)
反应代码:
function download(filename, text) {
var element = document.createElement('a');
element.setAttribute('href', 'data:application/pdf;charset=utf-8,' + encodeURIComponent(text));
element.setAttribute('target','_blank');
element.style.display = 'none';
document.body.appendChild(element);
element.click();
document.body.removeChild(element);
}
function test () {
Api(`tempFileDownload/report`, 'Get',"",3).then((data) => …Run Code Online (Sandbox Code Playgroud) Oracle从 Java 11 开始writeBytes\xe2\x80\x8b(byte[] b)向该类添加了方法。ByteArrayOutputStream该方法采用字节数组并将其写入ByteArrayOutputStream. 然而,ByteArrayOutputStream扩展OutputStream类定义了write\xe2\x80\x8b(byte[] b)做同样的事情。为什么 Java 需要一个新方法来做到这一点?
如何在同一个servlet请求中使用getOutputStream()和getWriter()?
outputstream ×10
java ×8
inputstream ×2
c# ×1
clojure ×1
httplistener ×1
jsp ×1
junit ×1
netbeans ×1
pdf ×1
reactjs ×1
reset ×1
servlets ×1
spring-boot ×1
stream ×1
string ×1
tcp ×1