标签: outputstream

为什么我的 PipedOutputStream 会死锁?

我正在尝试使用 PipedInputStream 和 PipedOutputStream 实现一个线程循环缓冲区,但是每次当我到达可运行的解码器中的 mHead.write 时它都会锁定。我认为使用单独的线程时不会出现死锁。

    private class DecoderTask implements Runnable{

    @Override
    public void run() {
        while(!mStop){
            try {
                    Log.d(TAG,"trying to write");
        mHead.write(decode( 0, 1000));
            mHead.flush();
            Log.d(TAG,"Decoded");
            } catch (DecoderException e) {
                Log.e(TAG,e.toString());
            } catch (IOException e) {
                Log.e(TAG,e.toString());
            }
        }
    }

}
private class WriteTask implements Runnable{

    @Override
    public void run() {
        while(!mStop){
            try {
                                 Log.d(TAG,"trying to read");
                 int read = mTail.read(mByteSlave, 0, mByteSlave.length);
                 mAudioTrack.flush();
                                 mAudioTrack.write(mByteSlave,0,read);
                                 Log.d(TAG,"read");                 
            } catch (IOException e) {
                Log.e(TAG,e.toString());
            }
        }
    }

}


//in …
Run Code Online (Sandbox Code Playgroud)

java android inputstream outputstream blocked-threads

4
推荐指数
1
解决办法
2838
查看次数

连接 ByteArrayOutputStream

public byte[] toByteArray() {
    try {
        ByteArrayOutputStream objectStream = dataObject.toByteArrayOutputStream();
        DataOutputStream dout = new DataOutputStream(objectStream);
        dout.writeUTF(recordid);    

        dout.close();
        objectStream.close();
        return objectStream.toByteArray();
    } catch (IOException e) {
        e.printStackTrace();
        return null;
    }
}
Run Code Online (Sandbox Code Playgroud)

上面的代码有问题。我首先创建一个 objectStream(在另一个类中)。然后我手动将 recordid 添加到 ByteArrayOutputStream。但是有没有办法先添加 recordId 然后将 ByteArrayOutputStream 附加到它?基本上我有 2 个 ByteArrayoutputStreams 需要连接(并保持一个 ByteArrayOutputStream)。

编辑:我的新版本应该可以工作,但不行。当我打印出dout的hashcode时,flush前后是一样的。好像一直空着?那可能吗?

public byte[] toByteArray() {
        try {

            ByteArrayOutputStream realOutputStream = new ByteArrayOutputStream();
            DataOutputStream dout = new DataOutputStream(realOutputStream);
            dout.writeUTF(dataObject.getClass().toString());
            dout.writeUTF(recordid);
            System.out.println("Recordid: " + recordid + "|" +  dout.hashCode());
            dout.flush();
            System.out.println("Recordid: " + recordid + "|" +  dout.hashCode()); …
Run Code Online (Sandbox Code Playgroud)

java outputstream java-me bytearrayoutputstream

4
推荐指数
1
解决办法
9577
查看次数

在 Java HttpServer 响应中设置内容类型

我有一个 java echo httpserver 了。

它适用于测试站点,但我正在使用的客户端代码无法获取数据。

服务器与https://www.hurl.it/完美配合

客户端与https://requestb.in/http://httpbin.org/post完美配合

将两者结合使用时,我会收到状态代码为 200 的响应,但即使正在发送元数据/正文内容,也不会在客户端中显示。

我唯一的猜测是因为不包括内容类型,客户可能对此很挑剔。

如何在响应中指定内容类型?

(注意,客户端向服务器发送一个字符串,将 POST 作为参数以及一些标头信息。此代码当前设置为仅返回正文内容/参数。)

任何想法表示赞赏!

import static java.net.HttpURLConnection.HTTP_OK;

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.InetSocketAddress;
import java.net.URLDecoder;
import java.util.List;

import com.sun.net.httpserver.Headers;
import com.sun.net.httpserver.HttpExchange;
import com.sun.net.httpserver.HttpHandler;
import com.sun.net.httpserver.HttpServer;

/**
* Echo the body of an HTTP request back as the HTTP response. This is merely
* a simple exercise of the Secret Sun Web Server. As configured, the URL to
* access …
Run Code Online (Sandbox Code Playgroud)

java outputstream httpserver server

4
推荐指数
1
解决办法
6113
查看次数

Android:覆盖 API 29 中现有 URI 的文件

以下代码获取 aString并将内容保存到现有文件中Uri。这些代码在 Android API 29 之前运行良好。

public void saveFile(String text, Uri existingSourceUri)
{
    try {

    ContentResolver cr = getContentResolver();
    OutputStream os = cr.openOutputStream(existingSourceUri);

    os.write(text.getBytes());
    os.flush();
    os.close();


    } catch (Exception e) {
       //show error message
    }
}
Run Code Online (Sandbox Code Playgroud)

对于 Android API 29+,行为不稳定。例如,如果第一次使用 some 调用该函数text,则该文件将被正确保存。但是,如果第二次text为空,则不会保存文件。

有什么帮助吗?

android uri outputstream file android-contentresolver

4
推荐指数
1
解决办法
1520
查看次数

如何检查套接字的输出流是否已关闭?

我有这个代码:

public void post(String message) {
    output.close();
    final String mess = message;
    (new Thread() {
        public void run() {
            while (true) {
                try {
                    output.println(mess);
                    System.out.println("The following message was successfully sent:");
                    System.out.println(mess);
                    break;
                } catch (NullPointerException e) {
                    try {Thread.sleep(1000);} catch (InterruptedException ie) {}
                }
            }
        }
    }).start();
}
Run Code Online (Sandbox Code Playgroud)

如您所见,我在代码的最开头关闭套接字,然后try使用它将一些信息发送到另一台计算机.该程序写道:"以下消息已成功发送".这意味着没有抛出NullPointerException.

那么,如果Java尝试使用套接字的封闭输出流,那么它是否会抛出异常?有没有办法检查套接字是关闭还是打开?

添加

我通过以下方式初始化套接字:

clientSideSocket = new Socket(hostname,port);
PrintWriter out = new PrintWriter(clientSideSocket.getOutputStream(), true);
browser.output = out;
Run Code Online (Sandbox Code Playgroud)

java sockets networking outputstream

3
推荐指数
1
解决办法
6491
查看次数

JSP gzip输出流

我知道我可以使用类似.gzip的输出流。


OutputStream outA = response.getOutputStream();
outWriter = new PrintWriter(new GZIPOutputStream(outA), false);      
response.setHeader("Content-Encoding", "gzip");
outWriter.println(.....);
outWriter.close();
Run Code Online (Sandbox Code Playgroud)

在JSP中,但是可以将其编写为:

OutputStream outA = response.getOutputStream();
outWriter =新的PrintWriter(new GZIPOutputStream(outA),false);      
response.setHeader(“ Content-Encoding”,“ gzip”);
%>
...

我知道这是在PHP中完成的,例如,在刷新输出缓冲区之前捕获其输出缓冲区,对缓冲区进行gzip压缩,然后最终将其写入。

但是在JSP中可能吗?

java jboss jsp gzip outputstream

3
推荐指数
1
解决办法
4126
查看次数

Android:将文件保存到SD卡

我正在尝试将文件从我的应用程序中保存到设备的外部存储器中.具体来说,我试图保存声音.

我已经按照每一个"教程"来做这件事,但这对我来说似乎并不特别令人困惑,但它对我来说不起作用.根本没有在SD卡上创建任何文件,更不用说实际传输信息了.

我以为我在某种程度上没有获得卡的正确路径,但无论我尝试过什么都行不通.我尝试输入"/ sdcard /",以及使用getExternalStorageDirectory()方法,以及其他随机实验.

在花了半天的时间在一些看似微不足道的事情上,我甚至不能再思考了,所以我希望你能原谅我提供的一些细节,但任何建议都会对此有所帮助.

android outputstream file save sd-card

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

从另一个C#程序捕获c#可执行输出

我正在执行一个C#程序,即来自另一个C#程序的.exe.但.exe在其程序中有一些Console.WriteLine().我想把标准输出到我的C#程序中.

例如,

考虑一个C#可执行文件,即1.exe,还有另一个程序2.cs.

我从2.cs 1.exe打电话.现在控制台从1. exe显示一些输出.但是我希望我的程序中的输出2.cs. 用于向用户显示信息.

可能吗?请帮忙

谢谢Sai sindhu

.net c# outputstream console-application

3
推荐指数
1
解决办法
2722
查看次数

重定向后重置cout

在我使用的程序中,我有一个c ++程序:

static ofstream s_outF(file.c_str());
if (!s_outF)
{
    cerr << "ERROR : could not open file " << file << endl;
    exit(EXIT_FAILURE);
}
cout.rdbuf(s_outF.rdbuf());
Run Code Online (Sandbox Code Playgroud)

这意味着我将我的cout重定向到一个文件.将cout返回标准输出的最简单方法是什么?

谢谢.

c++ outputstream

3
推荐指数
1
解决办法
590
查看次数

FilterOutputStream的用法

FilterOutputStreamJava中的实际用法是什么?来自javadocs:

此类是过滤输出流的所有类的超类.这些流位于已存在的输出流(基础输出流)之上,它将其用作数据的基本接收器,但可能沿途转换数据或提供其他功能.

对我来说,似乎有相同的方法OutputStream(可能由于某种原因覆盖它们?).它提供了什么样的数据"转换"以及什么时候可以在自己的Java应用程序中使用它?

java outputstream stream output

3
推荐指数
1
解决办法
3500
查看次数