出问题都是这一行 BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream(),"utf-8"));//设置编码,否则中文乱码
具体的问题
当post文件900K时候出现异常
剩余jvm内存53843792
Exception in thread "main" java.io.IOException: Server returned HTTP response code: 500 for URL: http://www.google.com/speech-api/v1/recognize?xjerr=1&client=chromium&lang=ja-jpat sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1305)at readflac.main(readflac.java:57)
剩余jvm内存43074296当post文件3M时出现异常。
Exception in thread "main" java.io.IOException: Error writing to serverat sun.net.www.protocol.http.HttpURLConnection.writeRequests(HttpURLConnection.java:468)at sun.net.www.protocol.http.HttpURLConnection.writeRequests(HttpURLConnection.java:480)at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1062)at readflac.main(readflac.java:57)
具体就是想要通过post音频区谷歌接口返回的是文本,求各位大神解答。另外如果有什么别的好的实现方法的话万望赐教。本人入门小菜。谢谢其中异常上面那个数字是剩余内存。。虚拟机的。应该不是不足的原因吧。希望各位指点一二。应该是传输的内容太大引发 的什么错误?
import java.awt.datatransfer.StringSelection;
import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import javax.swing.Spring;
public class readflac {
/**
* @param args
* @throws IOException
*/
public static void main(String[] args) throws IOException {
System.out.println(new File("").getAbsolutePath());
String url = "http://www.google.com/speech-api/v1" +
"/recognize?xjerr=1&client=chromium&lang=ja-jp";
URL postUrl = new URL(url);
HttpURLConnection connection = (HttpURLConnection)postUrl.openConnection();
// 设置是否向connection输出,因为这个是post请求,参数要放在
// http正文内,因此需要设为true
connection.setDoOutput(true);
// Read from the connection. Default is true.
connection.setDoInput(true);
// Set the post method. Default is GET
connection.setRequestMethod("POST");
// Post cannot use caches
// Post 请求不能使用缓存
connection.setUseCaches(false);
// This method takes effects to
// every instances of this class.
// URLConnection.setFollowRedirects是static函数,作用于所有的URLConnection对象。
// connection.setFollowRedirects(true);
// This methods only
// takes effacts to this
// instance.
// URLConnection.setInstanceFollowRedirects是成员函数,仅作用于当前函数
connection.setInstanceFollowRedirects(true);
// TODO Auto-generated method stub
connection.setRequestProperty("Content-Type","audio/x-flac; rate=16000");
connection.connect();
DataOutputStream outputStream = new DataOutputStream(connection.getOutputStream());
outputStream.write(readfileByYte("aaaa.flac"));
outputStream.flush();
outputStream.close();
System.out.println("dsfgdfsgdsfgshengyu"+Runtime.getRuntime().freeMemory());;
BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream(),"utf-8"));//设置编码,否则中文乱码
System.out.println("dsfgdfsgdsfgshengyu"+Runtime.getRuntime().freeMemory());;
getInfoFromJson(null, reader);
reader.close();
connection.disconnect();
}
public static File readFlacByByte(String fileName) {
File file = new File(fileName);
InputStream input = null;
try {
System.out.println("yi字节的方式读取文件");
input = new FileInputStream(file) ;
int tempByte = 0;
while ((tempByte = input.read())!= -1) {
System.out.println(tempByte);
}
input.close();
} catch (Exception e) {
e.printStackTrace();
return null;
// TODO: handle exception
}
return file;
}
public static byte[] readfileByYte(String filename) throws IOException {
File file = readFlacByByte(filename);
long len = file.length();
byte[] voice = new byte[(int) len];
FileInputStream fileInputStream = new FileInputStream(file);
fileInputStream.read(voice, 0, (int)len);
fileInputStream.close();
return voice;
}
public static void getInfoFromJson(String jsonString,BufferedReader reader) throws IOException {
String line="";
String lineTemp = "";
while ((line = reader.readLine()) != null){
//line = new String(line.getBytes(), "utf-8");
System.out.println(line);
lineTemp+=line;
}
String[] StringSelection = lineTemp.split(",");
for (int i = 0; i < StringSelection.length; i++) {
System.out.println(StringSelection[i]);
}
String[] strings = StringSelection[2].split("\"");
String resultString = strings[strings.length-1];
if (StringSelection[0].charAt(StringSelection[0].length()-1)=='0') {
System.out.println("匹配成功 结果为:"+resultString);
}
else {
System.out.println("匹配失败重新匹配");
}
System.out.println(StringSelection.length);
}
}