Articles of inputstream

Android版本> 2.3上的FileNotFoundException

我尝试在手机上将文件下载到SD卡。 在Android 2.1,2.2和2.3上,一切都按预期工作,但在Android 4.0(在模拟器和我的Galaxy Nexus上测试)它会抛出FileNotFoundException 。 堆栈跟踪: 02-27 21:49:06.733: W/System.err(27648): java.io.FileNotFoundException: http://www.wdr.de/wdrlive/media/wdr5.m3u 02-27 21:49:06.733: W/System.err(27648): at libcore.net.http.HttpURLConnectionImpl.getInputStream(HttpURLConnectionImpl.java:177) 02-27 21:49:06.733: W/System.err(27648): at de.arvidg.test.StartActivity$9.run(StartActivity.java:833) 02-27 21:49:06.733: W/System.err(27648): at java.lang.Thread.run(Thread.java:856) 我下载文件的方法: downloadFile(“http://www.wdr.de/wdrlive/media/wdr5.m3u”); public void downloadFile(final String fileUrl) { new Thread(new Runnable() { @Override public void run() { try { URL url = new URL(fileUrl); HttpURLConnection urlConnection = (HttpURLConnection) […]

智能手机上的文件读取性能:内部存储与SD卡与PC硬盘的比较

我的Android应用程序将使用大而大的文件(即大小在10MB到2GB之间)。 我一直想知道智能手机使用什么硬件来稳定存储,以及软件(文件读取/搜索)注意事项是否与PC硬盘类似。 我试图find有关硬件的信息并且有一些关于它的图片(内部存储,SD卡),但我检查的所有来源都不是全面和/或具体的。 我的(相互关联的)问题是: 在阅读“现代”智能手机(例如Android 2.2手机)上的大文件时,我必须考虑哪些主要差异,与使用PC的Java应用程序做同样的事情相比? (在磁盘搜索/读取性能方面;显然,手机RAM比PC小,所以在缓冲区等情况下必须考虑到这一点) 智能手机中使用的稳定存储硬件与PC硬盘之间的(相关)主要区别是什么? (我知道这是一个非常广泛的问题,所以我甚至欣赏这里非常简短的答案以及可能的一些可靠的外部URL) 在InputStream读取和搜索(skipBytes)方面,使用内部存储和SD卡之间是否存在差异(例如在Android上)(我故意不写“外部存储”,因为它不一定是每个SD卡上的SD卡设备)? SD卡速度慢吗? 例如,我想从2GB文件中读取2MB数据,这个2MB数据分布在文件的许多不同/远端部分。 所有偏移都是已知的,因此我创建偏移的升序,然后使用BufferedInputStream.read() (例如在DataInputStream )来读取它们(并使用skipBytes()在必要时进行搜索)。 因此,在底层文件系统中,这可能需要“遍历”整个2GB文件。 (例如,Android在需要时使用linux函数在文件中进行搜索。)然而,正在寻求像PC硬盘一样高效吗? 在寻求效率方面,SD卡与内部存储有何关系? 什么是典型的数据读取速度? (智能手机内部存储与SD卡与PC非SSD硬盘相比) 我知道我的具体应用的基准测试是必须的,但我也欢迎在这个问题上进行理论上的澄清。 重要提示 :当我问“……正在寻求与PC硬盘一样高效吗?”时,我(不)只是指绝对值,而是它的机制 。 也就是说,如果它基于相同的逻辑原理工作(=尽可能跳过大部分),或者存在一些缺点(例如,在SD卡上不能进行这种“基于跳过的”搜索,因此跳过更多 – – 即非比例 – 在智能手机硬件上比在PC硬盘上无用。

使用Dropbox API上传Android文件

如何使用Dropbox API将文件(图形,音频和video文件)上传到Dropbox? 我按照Dropbox SDK Android页面上的教程进行操作,可以使样本生效。 但是现在我要上传一个实际的File对象而不是String,而且我正在努力。 示例代码没有任何问题,看起来像这样: String fileContents = “Hello World!”; ByteArrayInputStream inputStream = new ByteArrayInputStream(fileContents.getBytes()); try { Entry newEntry = mDBApi.putFile(“/testing_123456.txt”, inputStream, fileContents.length(), null, null); } catch (DropboxUnlinkedException e) { Log.e(“DbExampleLog”, “User has unlinked.”); } catch (DropboxException e) { Log.e(“DbExampleLog”, “Something went wrong while uploading.”); } 但是当我尝试更改它并使用以下代码上传实际文件时: File tmpFile = new File(fullPath, “IMG_2012-03-12_10-22-09_thumb.jpg”); […]

无法在Jelly Bean上读取套接字InputStream

我有一个TCP套接字连接,在Android 2.3上运行良好但现在面临Android 4.1上的一些问题。 问题是InputStream.read()方法总是返回-1(没有阻塞),就像关闭连接一样。 创建套接字: SocketFactory socketFactory = SocketFactory.getDefault(); Socket socket = socketFactory.createSocket(“c.whatsapp.net”, 5222); socket.setSoTimeout(3*60*1000); socket.setTcpNoDelay(true); 检索输入和输出流并编写一些初始数据: InputStream inputStream = new BufferedInputStream(socket.getInputStream()); OutputStream outputStream = new BufferedOutputStream(socket.getOutputStream()); outputStream.write(87); outputStream.write(65); outputStream.write(1); outputStream.write(2); outputStream.flush(); 然后,这个条件总是不受阻塞地通过: int c = inputStream.read(); if (c < 0) { Log.d(TAG, "End of stream"); } 此代码在后台线程中运行 。 它正在研究姜饼。 试图使用InputStreamReader和OutputStreamWriter而不是直接流 – 没有效果。

将文件从外部存储加载到Inputstream

我的外部目录中有一个video文件。 我怎样才能将它加载到inputstreamvariables。 目前我正在读取res / raw文件夹中的文件,但我想从SD卡中读取它。 我也不知道文件的名称,但它的路径将通过意图收到。 检查以下代码 public class SonicTest extends Activity { VideoView videoView; String uri; InputStream soundFile; File file; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); } public void play(View view) { new Thread(new Runnable() { public void run() { float speed= (float) 1.0; float pitch= (float) 1.5; float rate= (float) 1.0; […]

Android – 从网站下载图片,保存到内部私人应用程序的内存,显示列表项

我想要做的是这样的:我想我的应用程序从互联网上下载一个图像,并将其保存到手机的内部存储器的应用程序私有位置。 如果没有图像可用于列表项目(即它不能在互联网上find),我想要一个默认的占位符图像显示。 这是我在list_item_row.xml文件中定义的默认图像。 在我的ListActivity文件中,我调用了一个我写的CustomCursorAdapter类的实例。 它在CustomCursorAdapter中遍历所有列表项,并定义需要将哪些内容映射到视图,包括通过尝试从内部内存读取图像文件。 我已经看到了这个问题上的几个问题,但这些例子要么是特定于外部手机内存(如SDCard),涉及保存string而不是图像,或涉及使用Bitmap.CompressFormat减less文件的分辨率(这是不必要的我的情况,因为这些图像将是小分辨率的小缩略图)。 试图拼凑每个例子中的代码一直是困难的,因此我问我的具体例子。 目前,我相信我已经写了有效的代码,但没有图像显示我的列表项目,包括默认的占位符图像。 我不知道这个问题是由无效的下载/保存代码,还是无效的读取代码造成的 – 这不利于我不知道如何检查内部存储器来查看图像是否存在。 无论如何,这是我的代码。 任何帮助将不胜感激。 ProductUtils.java public static String productLookup(String productID, Context c) throws IOException { URL url = new URL("http://www.samplewebsite.com/" + productID + ".jpg"); URLConnection connection = url.openConnection(); InputStream input = connection.getInputStream(); FileOutputStream output = c.openFileOutput(productID + "-thumbnail.jpg", Context.MODE_PRIVATE); byte[] data = new byte[1024]; output.write(data); output.flush(); […]

如何从JsonParser(Jackson Json)获取底层string

通过文档和源代码看,我没有看到一个明确的方式来做到这一点。 好奇,如果我失去了一些东西。 假设我从服务器响应收到一个InputStream。 我从这个InputStream创build一个JsonParser。 预计服务器响应是包含有效json的文本,例如: {"iamValidJson":"yay"} 但是,如果响应最终是无效的json或者根本不是json,例如: Some text that is not json JsonParser将最终抛出exception。 在这种情况下,我希望能够从JsonParser中提取底层的无效文本“ Some text that is not json ”,因此可以用于其他目的。 我不能将它从InputStream中提取出来,因为它不支持重置,并且JsonParser的创build会消耗它。 有没有办法做到这一点?

HttpUrlConnection.getInputStream在Android中返回空stream

我使用HttpUrlConnection向服务器发出GET请求。 连接后: 我得到的答复编号是:200 我收到回复消息:OK 我得到inputstream,没有抛出exception,但: 在一个独立的程序中,我得到了正如预期的那样: {“name”:“我的名字”,“生日”:“01/01/1970”,“id”:“100002215110084”} 在android活动中,stream是空的(available()== 0),因此我不能得到任何文本。 任何提示或跟踪? 谢谢。 编辑:这里是代码 请注意:我使用import java.net.HttpURLConnection; 这是标准的http Java库。 我不想使用任何其他外部库 。 事实上,我在android中使用库中的httpclient有问题(他们的一些匿名.class不能被apk编译器使用)。 那么,代码: URLConnection theConnection; theConnection = new URL("www.example.com?query=value").openConnection(); theConnection.setRequestProperty("Accept-Charset", "UTF-8"); HttpURLConnection httpConn = (HttpURLConnection) theConnection; int responseCode = httpConn.getResponseCode(); String responseMessage = httpConn.getResponseMessage(); InputStream is = null; if (responseCode >= 400) { is = httpConn.getErrorStream(); } else […]

如何获取位图信息,然后从internet-inputStream解码位图?

背景 假设我有一个来自某个图像文件的互联网的inputStream。 我希望获得关于图像文件的信息,然后才解码它。 它对于多种用途非常有用,例如缩减采样以及在显示图像之前预览信息。 问题 我试图通过用BufferedInputStream包装inputStream来标记和重置inputStream,但它不起作用: inputStream=new BufferedInputStream(inputStream); inputStream.mark(Integer.MAX_VALUE); final BitmapFactory.Options options=new BitmapFactory.Options(); options.inJustDecodeBounds=true; BitmapFactory.decodeStream(inputStream,null,options); //this works fine. i get the options filled just right. inputStream.reset(); final Bitmap bitmap=BitmapFactory.decodeStream(inputStream,null,options); //this returns null 为了得到一个url的inputStream,我使用: public static InputStream getInputStreamFromInternet(final String urlString) { try { final URL url=new URL(urlString); final HttpURLConnection urlConnection=(HttpURLConnection)url.openConnection(); final InputStream in=urlConnection.getInputStream(); return in; } […]

如何在Volley Library中获得Inpustream作为响应?

我在应用程序中使用Volley库。 在响应监听器,我需要InputStream作为响应 我如何得到它?