标签: outputstream

将内容输出到std :: ostream并返回std :: ostream的函数?

我想编写一个函数来输出ostream传入的内容,并返回流,如下所示:

std::ostream& MyPrint(int val, std::ostream* out) {
  *out << val;
  return *out;
}

int main(int argc, char** argv){
    std::cout << "Value: " << MyPrint(12, &std::cout) << std::endl;
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

打印这样的值会很方便,并将函数调用嵌入到输出操作符链中,就像我一样main().

但它不起作用,打印出来:

$ ./a.out
12Value: 0x6013a8
Run Code Online (Sandbox Code Playgroud)

期望的输出是这样的:

Value: 12
Run Code Online (Sandbox Code Playgroud)

我怎样才能解决这个问题?我是否必须定义一个operator<<

更新:澄清了所需的输出.

更新2:有些人不明白为什么我会打印这样的数字,使用函数而不是直接打印它.这是一个简化的例子,实际上该函数打印的是复杂的对象而不是int.

c++ outputstream ostream

8
推荐指数
2
解决办法
3万
查看次数

响应输出流内容长度?

我正在通过各种方法写输出流.在关闭之前,我怎样才能找出输出流的内容长度?

java outputstream response

8
推荐指数
2
解决办法
2万
查看次数

Java检测封闭流

我有一个由OutputStream和InputStream组成的通用套接字实现.

在我做了一些工作之后,我正在关闭OutputStream.

完成后,我的InputStream的read()方法返回-1无限的时间,而不是像我预期的那样抛出异常.

我现在不确定最安全的路线,所以我有一些问题:

  • 我可以安全地假设-1仅在流关闭时返回吗?
  • 是否无法重新创建强制断开连接时发生的IO异常?
  • 我应该发送一个数据包来告诉我的InputStream它应该关闭而不是前两个方法吗?

谢谢!

java sockets inputstream outputstream

8
推荐指数
1
解决办法
7044
查看次数

反序列化多个Java对象

亲爱的同事们,

我有一个Garden类,我在其中序列化和反序列化多个Plant类对象.序列化正在运行,但是如果想要在mein静态方法中将其分配给调用变量,则反序列化不起作用.

public void searilizePlant(ArrayList<Plant> _plants) {
    try {
        FileOutputStream fileOut = new FileOutputStream(fileName);
        ObjectOutputStream out = new ObjectOutputStream(fileOut);
        for (int i = 0; i < _plants.size(); i++) {
            out.writeObject(_plants.get(i));
        }
        out.close();
        fileOut.close();
    } catch (IOException ex) {
    }
}
Run Code Online (Sandbox Code Playgroud)

反序列化代码:

public ArrayList<Plant> desearilizePlant() {
    ArrayList<Plant> plants = new ArrayList<Plant>();
    Plant _plant = null;
    try {
        ObjectInputStream in = new ObjectInputStream(new FileInputStream(fileName));
        Object object = in.readObject();

       // _plant = (Plant) object;


        // TODO: ITERATE OVER THE WHOLE STREAM
        while (object …
Run Code Online (Sandbox Code Playgroud)

java serialization outputstream deserialization

8
推荐指数
1
解决办法
2万
查看次数

Android AudioRecord.read返回0项的数组

我正在尝试做的事情: 我正在尝试编写一个从Android麦克风中读取音频的程序(无需录制),并捕获一些使用服务的大小程度.现在我正在从我的活动向我的服务发送一个脉冲,以获得快速的声音读取,并检查振幅的Logcat打印输出作为我的音量.

我的问题: AudioRecord的read方法返回0.

我尝试过: 录制完整的音频而不是使用NullOutputStream并没有什么区别.一些早期版本在添加了一些微不足道的变化(如logcat调用)后随机开始工作,然后停止工作.

我的想法: 我原本以为可能是其他应用程序正在使用麦克风,但即使这是唯一值得注意的服务,它仍会返回0.

我的服务:

import org.apache.commons.io.output.NullOutputStream;


public class RecordingService extends Service {

public static final int SAMPLE_RATE = 16000;

private AudioRecord mRecorder;
private File mRecording;
private short[] mBuffer;

public static final NullOutputStream NULL_OUTPUT_STREAM = new NullOutputStream();

public double amplitude = 0.0;

public String TAG = "TAG";

public void onCreate() {
    super.onCreate();
}

public int onStartCommand(Intent intent, int flags, int startId){

    initRecorder();
    mRecorder.startRecording();
    mRecording = getFile("raw");
    startBufferedWrite(mRecording, intent);
    mRecorder.stop();
    mRecorder.release();
    stopSelf();

    return START_STICKY;
}

private void …
Run Code Online (Sandbox Code Playgroud)

arrays service android outputstream audio-recording

8
推荐指数
0
解决办法
1326
查看次数

java.io.PrintStream.write(PrintStream.java:480)中的Java StackOverflowError并且没有进一步的堆栈跟踪

我正在运行一个由另一个人编写的Java程序,该程序的数据比最初为该程序设计的数据多,例如输入文件的10倍,大致是二次运行时.我遇到了不同的问题,现在的目的是一点一点地解决它们,并感谢我能得到的所有帮助 - 非常感谢您的建议!

在执行期间,当已经打印了大量输出(重定向到文件)时,我得到以下输出:

Exception in thread "main" java.lang.StackOverflowError  
        at java.io.PrintStream.write(PrintStream.java:480)  
        [...]  
        at java.io.PrintStream.write(PrintStream.java:480)
Run Code Online (Sandbox Code Playgroud)

堆栈跟踪是第一件令我困惑的事情,因为它是一次又一次地重复同一条线.此外,它无意在代码或执行中出现问题.

我的想法/研究

  • 的StackOverflowError
    • 可能表示内存太少.使用-Xmx110G标志,我提供了110 G内存并在执行时对其进行监控,仅使用了大约32 G.所以这可能不是问题所在.
    • 由于编程错误导致无限循环,可能会抛出.但是,我真的无法检查这个,因为我对代码不够熟悉,堆栈跟踪无法帮助我在代码中找到问题的位置.
    • [假设]可能是由于输出的写入比执行和新的打印/写入调用慢.不过,为什么没有进一步的堆栈跟踪?我该怎么检查并解决这个问题?
  • 为PrintStream

    • 搜索"PrintStream"后只搜索代码片段

      // reset output stream to suppress the annoying output of the Apache batik library. Gets reset after lib call.  
      OutputStream tmp=System.out;  
      System.setOut(new PrintStream(new org.apache.commons.io.output.NullOutputStream()));  
      drawRes.g2d.stream(new FileWriter(svgFilePath), false);      
      System.setOut(new PrintStream(tmp));  
      
      Run Code Online (Sandbox Code Playgroud)
    • [假设]写入void/null不起作用
    • [解决方法]如果跳过输出流的更改并且只是"生效"并且创建了大输出,则程序似乎运行(进入其他问题,但这是另一种情况).任何想法为什么会这样?

征求意见
如果您对正在进行的工作有什么建议,那么Java代码具体做什么,请帮助我理解它.特别是堆栈跟踪让我感到沮丧,因为它没有提供开始修复的地方.我也很感谢有关如何解决此问题,获取堆栈跟踪,修复代码以避免StackOverflow等的一般方法.

一些系统环境事实

  • Linux机器
  • 128 G内存
  • Java的

    openjdk version "1.8.0_121"  
    OpenJDK Runtime Environment (IcedTea 3.3.0) (suse-28.1-x86_64)  
    OpenJDK 64-Bit Server VM (build 25.121-b13, mixed mode) …
    Run Code Online (Sandbox Code Playgroud)

java stack-overflow outputstream stack-trace

8
推荐指数
1
解决办法
218
查看次数

Java servlet和IO:创建文件而不保存到磁盘并将其发送给用户

我希望可以帮助我解决文件创建/响应问题.我知道如何创建和保存文件.我知道如何通过ServletOutputStream将该文件发送回用户.

但我需要的是创建一个文件,而不是将其保存在磁盘上,然后通过ServletOutputStream发送该文件.

上面的代码解释了我所拥有的部分.任何帮助赞赏.提前致谢.

// This Creates a file
//
String   text = "These days run away like horses over the hill";
File     file = new File("MyFile.txt");
Writer writer = new BufferedWriter(new FileWriter(file));
writer.write(text);
writer.close();

// Missing link goes here
//

// This sends file to browser
//
InputStream inputStream = null;
inputStream = new FileInputStream("C:\\MyFile.txt");

byte[] buffer = new byte[8192];
ByteArrayOutputStream baos = new ByteArrayOutputStream();

int bytesRead;
while (  (bytesRead = inputStream.read(buffer)) != -1)
   baos.write(buffer, 0, bytesRead);

response.setContentType("text/html");
response.addHeader("Content-Disposition", "attachment; …
Run Code Online (Sandbox Code Playgroud)

java io servlets outputstream response

7
推荐指数
1
解决办法
2万
查看次数

使用HttpServletResponse创建UTF-8文件

我正在尝试使用HttpServletResponse(HttpServlet)创建一个UTF-8文件"myFile.aaa".我之所以需要它是UTF-8,是因为它可能包含特殊的不可打印字符.

但是,下面的代码似乎创建了ANSI编码的文件.至少这是Notepad ++所说的,以及从这个文件中读取字符的内容.我究竟做错了什么?

谢谢

public void doPost(HttpServletRequest req, HttpServletResponse res)
    throws ServletException, IOException
    {
        res.setHeader("Content-Type", "application/octet-stream; charset=UTF-8");
        res.setHeader("Content-Disposition","attachment;filename=myFile.aaa");
        res.setCharacterEncoding("UTF-8");
        ServletOutputStream os = res.getOutputStream();
        os.print("Hello World");
        os.flush();
        os.close();
    }
Run Code Online (Sandbox Code Playgroud)

servlets outputstream utf-8 character-encoding

7
推荐指数
2
解决办法
2万
查看次数

没有缓冲的OutputStreamWriter是否存在?

我需要将一个流转换char为一个bytes 流,即我需要一个从java.io.Writer接口到a 的适配器java.io.OutputStream,支持任何有效的Charset,我将作为配置参数.

但是,java.io.OutputStreamWriter该类有一个隐藏的秘密:sun.nio.cs.StreamEncoder它委托给下面的对象创建一个8192字节(8KB)的缓冲区,即使你没有要求它.

问题是,OutputStream最后我插入了一个需要计算正在写入的字节数的包装器,以便在输出特定数量的字节后立即停止执行源系统.如果OutputStreamWriter正在创建一个8K缓冲区,我只是被告知生成的字节数太晚,因为它们只会在缓冲区刷新时到达我的计数器(所以已经有超过8,000个已经生成的字节在等待我OutputStreamWriter缓冲).

所以,问题是,有没有在Java运行时的任何地方Writer- > OutputStream桥可以运行无缓冲

我真的,真的很讨厌自己写这个:( ...

注意:在每次写入时按下flush()OutputStreamWriter不是有效的替代方法.这会带来很大的性能损失(synchronized涉及到一个块StreamEncoder).

注2:我知道可能有必要在桥上保留一个小的char溢出来计算代理.这不是我需要在它生成第n个字节的那一刻停止执行源系统(这是不可能的,因为给定的字节可以byte[]write调用中以更大的形式出现给我).但是我需要尽快停止它,等待8K,2K甚至200字节的缓冲区才能刷新,这简直太迟了.

java buffer outputstream writer

7
推荐指数
1
解决办法
863
查看次数

如何将字符串写入 Scala Process?

我开始并运行了一个 Scala 进程。

    val dir = "/path/to/working/dir/"
    val stockfish = Process(Seq("wine", dir + "stockfish_8_x32.exe"))
    val logger = ProcessLogger(printf("Stdout: %s%n",  _))
    val stockfishProcess = stockfish.run(logger, connectInput = true)
Run Code Online (Sandbox Code Playgroud)

该进程读取和写入标准 IO(控制台)。如果进程已经启动,如何向进程发送字符串命令?

Scala 进程 API 具有 ProcessBuilder,它又具有一堆有用的方法。但是 ProcessBuilder 是进程开始编写复杂的 shell 命令之前使用的。Scala 也有 ProcessIO 来处理输入或输出。我也不需要。我只需要向我的进程发送消息。

在 Java 中,我会做这样的事情。

        String dir = "/path/to/working/dir/";
        ProcessBuilder builder = new ProcessBuilder("wine", dir + "stockfish_8_x32.exe");
        Process process = builder.start();

        OutputStream stdin = process.getOutputStream();
        InputStream stdout = process.getInputStream();

        BufferedReader reader = new BufferedReader(new InputStreamReader(stdout));
        BufferedWriter writer = new …
Run Code Online (Sandbox Code Playgroud)

io scala inputstream outputstream process

7
推荐指数
1
解决办法
2300
查看次数