缓冲区java阻塞到1024?
问题描述:
我想在我的缓冲区中存储超过1024个字节。其实我试图从python
脚本中获得价值。从我python
脚本缓冲区java阻塞到1024?
33值的工作原理:
33*15(digits)*2(2 types of values)=990 bytes
。
如果我尝试发送超过33个值,则不起作用。我的程序说收到了29个字节。
我觉得问题是从缓冲区。我试图修复在65536缓冲区,但它没有改变。它是否存在任何解决方案像我的缓冲区一样储存更多数据?
Python代码:
from pylab import*
from rtlsdr import*
from bluetooth import*
import sys
#configure device
sdr= RtlSdr()
sdr.sample_rate=double(sys.argv[3])
sdr.gain=double(sys.argv[2])
sdr.center_freq=double(sys.argv[1])
NFFT=34
#Bluetooth connection
server_sock=BluetoothSocket(RFCOMM)
server_sock.bind(("",PORT_ANY))
server_sock.listen(1)
port=server_sock.getsockname()[1]
uuid="94f39d29-7d6d-437d-973b-fba39e49d4ee"
client_sock,client_info=server_sock.accept()
while(1):
samples=sdr.read_samples(256*1024)
result=psd(samples,NFFT, Fs=sdr.sample_rate/1e6, Fc=sdr.center_freq*1e6/1e6)
tab_freq=(result[1]/1e6)
value_freq=str(tab_freq)[1:-1]
value_list=[format(float(v), ".10f") for v in value_freq.split()]
value_freq2= "\n".join(value_list)
tab_pxx=result[0]
value_pxx=str(tab_pxx)[1:-1]
client_sock.send(value_freq2+'\n'+'\n'.join(value_pxx.split()))
java代码:
public void run() {
byte[] buffer = new byte[1048576]; // 20 bits
int bytes;
String strRx = "";
while (running) {
try {
bytes = connectedInputStream.read(buffer);
final String strReceived_freq = new String(buffer,0, bytes);
final String strReceived_pxx = new String(buffer,(bytes/2)+1, bytes);
//final int samples_sdr=new Integer(buffer,0,bytes);
final String strByteCnt = String.valueOf(bytes) + " bytes received.\n";
runOnUiThread(new Runnable(){
@Override
public void run() {
Pxx_value.setText(strReceived_pxx+"\n"); // get data PXX
freq_value.setText(strReceived_freq+"\n"); // get data freq
// plot value
/* for (int i=0; i<nb_points; i++)
{
freq[i]=Double.parseDouble(strReceived_freq);
pxx[i]=Double.parseDouble(strReceived_pxx);
series.appendData(new DataPoint(freq[i],pxx[i]), true,500);
}*/
}});
感谢您的帮助。
connectedInputStream连接到了什么? 'new String(buffer,(bytes/2)+1,bytes)'中计算的意义究竟是什么? – EJP
使用connectedInputStream,我可以通过蓝牙从Raspberry PI 3获取数据。我只需编辑我的问题即可添加我的Python脚本。 'new String(buffer,0,bytes/2)'得到所有freq值和'new String(buffer,(bytes/2)+ 1,bytes)得到pxx值(dB/Hz)' – azzerty2017
你不能得到来自输入流的内容比可读取的内容更多。你可以尝试添加一个'BufferedInputStream'。但是如果你确实需要一次2048字节的话,你需要'DataInputStream.readFully()'。 – EJP