标签: dataoutputstream

Android:通过TCP套接字流式传输音频

对于我的应用程序,我需要在Android手机上录制来自MIC的音频,并通过TCP将其发送到需要播放的其他Android手机.

我正在使用AudioRecordAudioTrack上课.这适用于文件 - 使用文件将音频写入文件DataOutputStream,并使用它读取DataInputStream.

但是,如果我从套接字而不是文件中获取相同的流,并尝试写入它,我会得到一个例外.

我无法理解可能出现的问题.任何帮助将不胜感激.

编辑:即使我尝试使用更大的缓冲区大小(65535字节,160000字节),问题也是一样的.

这是代码:

录音机:

int bufferSize = AudioRecord.getMinBufferSize(11025, , AudioFormat.CHANNEL_CONFIGURATION_MONO, AudioFormat.ENCODING_PCM_16BIT); 

AudioRecord recordInstance = new AudioRecord(MediaRecorder.AudioSource.MIC, 11025, AudioFormat.CHANNEL_CONFIGURATION_MONO, AudioFormat.ENCODING_PCM_16BIT, bufferSize);

byte[] tempBuffer = new byte[bufferSize];

recordInstance.startRecording();

while (/*isRecording*/) {
      bufferRead = recordInstance.read(tempBuffer, 0, bufferSize);
      dataOutputStreamInstance.write(tempBuffer);
}
Run Code Online (Sandbox Code Playgroud)

上面的DataOutputStream获得如下:

BufferedOutputStream buff = new BufferedOutputStream(out1); //out1 is the socket's outputStream
DataOutputStream dataOutputStreamInstance = new DataOutputStream (buff);
Run Code Online (Sandbox Code Playgroud)

请你看看,让我知道我在这里做错了什么?

谢谢,

java sockets android dataoutputstream

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

Java套接字:DataOutputStream还是OutputStream?

我还是比较新的插座,我还没有看到有关这个主题的任何信息.

要写入连接的套接字,您可以使用

socket.getOutputStream().write
Run Code Online (Sandbox Code Playgroud)

或者DataOutputStream从套接字创建一个新的OutputStream并写入.

  • 什么被认为是"良好实践",使用DataOutputStream或OutputStream?我在互联网上找到的大多数例子都使用DataOutputStream(发送字符串,例如双向聊天).
  • 使用DataOutputStream而不是OutputStream有什么优点或缺点吗?
  • 例如,在发送文件时,这两者之间的性能是否存在差异?

java sockets networking dataoutputstream

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

DataOutputSteam给我一个'java.io.IOException:意外的流结束'?

我正在尝试使用HttpUrlConnection从Android应用程序发出WebService请求.但有时它会起作用,有时则不起作用.

当我尝试发送此值时:

JSON值

 {"Calle":"Calle Pérez 105","DetalleDireccion":"","HoraPartida":"May 18, 2014 9:17:10 AM","Numero":0,"PuntoPartidaLat":18.477295994621315,"PuntoPartidaLon":-69.93638522922993,"Sector":"Main Sector"}
Run Code Online (Sandbox Code Playgroud)

我在DataOutputStream关闭函数中遇到了"意外的流结束"异常.

这是我的代码:

DataOutputStream printout;
// String json;
byte[] bytes;
DataInputStream input;

URL serverUrl = null;
try {
    serverUrl = new URL(Config.APP_SERVER_URL + URL);
} catch (MalformedURLException e) {
    ...
} 

bytes = json.getBytes();
try {

    httpCon = (HttpURLConnection) serverUrl.openConnection();
    httpCon.setDoOutput(true);
    httpCon.setUseCaches(false);
    httpCon.setFixedLengthStreamingMode(bytes.length);
    httpCon.setRequestProperty("Authorization", tokenType + " "+ accessToken);
    httpCon.setRequestMethod("POST");
    httpCon.setRequestProperty("Content-Type", "application/json");

    printout = new DataOutputStream(httpCon.getOutputStream());
    printout.writeBytes(json);
    printout.flush();
    printout.close();
    ...
}
Run Code Online (Sandbox Code Playgroud)

java android httpurlconnection dataoutputstream

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

用于反转字节顺序/更改字节顺序的命令行

我在一些脚本中乱砍,试图解析Javas编写的一些数据DataOutputStream#writeLong(...).由于java似乎总是写大端,我在将字节输入时遇到问题od.这是因为od总是假设endianess与你当前所在的arch的endianess匹配,而且我在一个小端机器上.

我正在寻找一个简单的单行程来反转字节顺序.假设你知道文件的最后8个字节是由前面提到的writeLong(...)方法编写的.我目前打印这篇文章的最佳尝试是

tail -c 8 file | tac | od -t d8
Run Code Online (Sandbox Code Playgroud)

,但tac似乎只对文本有效(足够公平).我找到了一些引用dd conv=swab,但这只是成对交换字节,并且不能反转这八个字节.

有谁知道这个好的单行程?

java swap endianness dataoutputstream

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

为什么DataOutputStream.writeUTF()在开头添加额外的2个字节?

当我尝试使用sax在套接字上解析xml时,我遇到了一个奇怪的现象.经过分析,我注意到DataOutputStream在我的数据前添加了2个字节.

DataOutputStream发送的消息:

0020  50 18 00 20 0f df 00 00  00 9d 3c 3f 78 6d 6c 20   P.. .... ..<?xml 
0030  76 65 72 73 69 6f 6e 3d  22 31 2e 30 22 3f 3e 3c   version= "1.0"?><
0040  63 6f 6d 70 61 6e 79 3e  3c 73 74 61 66 66 3e 3c   company> <staff><
0050  66 69 72 73 74 6e 61 6d  65 3e 79 6f 6e 67 3c 2f   firstnam e>yong</
0060 …
Run Code Online (Sandbox Code Playgroud)

java dataoutputstream

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

如何同时使用ByteArrayOutputStream和DataOutputStream(Java)

我在这里遇到了很多问题,我认为这是因为我不太了解如何使用Java提供的API.

我需要写一个intbyte[]一个byte[]

我想用a DataOutputStream来解决数据写入writeInt(int i)write(byte[] b),并且能够把它放到一个字节数组中,我应该使用ByteArrayOutputStream方法toByteArray().

我知道这个类使用Wrapper模式,所以我有两个选择:

DataOutputStream w = new DataOutputStream(new ByteArrayOutputStream());
Run Code Online (Sandbox Code Playgroud)

要么

ByteArrayOutputStream w = new ByteArrayOutputStream(new DataOutputStream());
Run Code Online (Sandbox Code Playgroud)

但在这两种情况下,我都"松散"了一种方法.在第一种情况下,我无法访问该toByteArray()方法,而在第二种情况下,我无法访问该writeInt()方法.

我应该如何一起使用这些课程?

java wrapper dataoutputstream bytearrayoutputstream

11
推荐指数
1
解决办法
6万
查看次数

DataOutputStream:"编码字符串太长"限制的目的

方法中存在一个奇怪的限制java.io.DataOutputStream.writeUTF(String str),它将utf-8编码字符串的大小限制为65535字节:

    if (utflen > 65535)
        throw new UTFDataFormatException(
            "encoded string too long: " + utflen + " bytes");
Run Code Online (Sandbox Code Playgroud)

这很奇怪,因为:

  1. 在这种方法的JavaDoc中没有提到这种限制
  2. 通过复制和修改此类的内部static int writeUTF(String str, DataOutput out)方法可以轻松解决此限制
  3. 相反的方法没有这种限制java.io.DataInputStream.readUTF().

根据上面我无法理解这种限制writeUTF方法的目的.我错过了什么或误解了什么?

java dataoutputstream restrictions

10
推荐指数
1
解决办法
7093
查看次数

使用DataOutputStream编写大字符串

我一直在做一些套接字编程来通过线路传输信息.我遇到了DataOutputStream.writeUTF()的问题.它似乎允许高达64k的字符串,但我有一些情况,我可以跑过这个.是否有任何好的替代方案支持更大的字符串或我需要自己滚动?

java dataoutputstream

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

DataOutputStream#writeBytes(String)vs BufferedWriter #write(String)

我想为我的报告创建一个HTML文件.可以使用创建报告中的内容BufferedWriter#write(String)

File f = new File("source.htm");
BufferedWriter bw = new BufferedWriter(new FileWriter(f));
bw.write("Content");
Run Code Online (Sandbox Code Playgroud)

或者通过使用 DataOutputStream#writeBytes(String)

File f = new File("source.htm");
DataOutputStream dosReport = new DataOutputStream(new FileOutputStream(f)); 
dosReport.wrtiteBytes("Content");
Run Code Online (Sandbox Code Playgroud)

其中一个比另一个好吗?为什么会这样?

java string dataoutputstream bufferedwriter java-io

6
推荐指数
1
解决办法
7156
查看次数

如何在Java中附加到DataOutputStream?

我希望我的程序将URL地址(一次一个)保存到文件中.这些地址需要以UTF格式保存,以确保它们是正确的.

我的问题是文件一直被覆盖,而不是附加:

    DataOutputStream DOS = new DataOutputStream(new FileOutputStream(filen, true));
    Count = 0;
    if (LinkToCheck != null) {
    System.out.println(System.currentTimeMillis() + " SaveURL_ToRelatedURLS d "+LinkToCheck.Get_SelfRelationValue()+" vs "+Class_Controller.InterestBorder);
    if (LinkToCheck.Get_SelfRelationValue() > Class_Controller.InterestBorder) {
        DOS.writeUTF(LinkToCheck.Get_URL().toString() + "\n");
        Count++;
    }
    }
    DOS.close();
Run Code Online (Sandbox Code Playgroud)

此代码不会附加,所以我该如何追加它?

java append dataoutputstream

6
推荐指数
1
解决办法
2603
查看次数