我正在尝试使用 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) 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 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) 以下代码获取 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为空,则不会保存文件。
有什么帮助吗?
我有这个代码:
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) 我知道我可以使用类似.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中可能吗?
我正在尝试将文件从我的应用程序中保存到设备的外部存储器中.具体来说,我试图保存声音.
我已经按照每一个"教程"来做这件事,但这对我来说似乎并不特别令人困惑,但它对我来说不起作用.根本没有在SD卡上创建任何文件,更不用说实际传输信息了.
我以为我在某种程度上没有获得卡的正确路径,但无论我尝试过什么都行不通.我尝试输入"/ sdcard /",以及使用getExternalStorageDirectory()方法,以及其他随机实验.
在花了半天的时间在一些看似微不足道的事情上,我甚至不能再思考了,所以我希望你能原谅我提供的一些细节,但任何建议都会对此有所帮助.
我正在执行一个C#程序,即来自另一个C#程序的.exe.但.exe在其程序中有一些Console.WriteLine().我想把标准输出到我的C#程序中.
例如,
考虑一个C#可执行文件,即1.exe,还有另一个程序2.cs.
我从2.cs 1.exe打电话.现在控制台从1. exe显示一些输出.但是我希望我的程序中的输出2.cs. 用于向用户显示信息.
可能吗?请帮忙
谢谢Sai sindhu
在我使用的程序中,我有一个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返回标准输出的最简单方法是什么?
谢谢.
FilterOutputStreamJava中的实际用法是什么?来自javadocs:
此类是过滤输出流的所有类的超类.这些流位于已存在的输出流(基础输出流)之上,它将其用作数据的基本接收器,但可能沿途转换数据或提供其他功能.
对我来说,似乎有相同的方法OutputStream(可能由于某种原因覆盖它们?).它提供了什么样的数据"转换"以及什么时候可以在自己的Java应用程序中使用它?