我正在使用LogManager.readConfiguration()它需要一个InputStream,其内容我想来自一个字符串.是否存在相应StringBufferInputStream的不被弃用的内容,例如ReaderToInputStreamAdaptor?
我正在创建一个接受单个InputStream作为参数的Java方法.为了方便使用基于字符的流,我InputStream 在方法实现的开头包装提供,如下所示:
public void doStuff(InputStream inStream) {
BufferedReader reader = new BufferedReader(new InputStreamReader(inStream));
...
}
Run Code Online (Sandbox Code Playgroud)
由于InputStream(inStream)传递给我的方法,我不想关闭它...因为我认为应该是客户端调用我的方法的责任(这个假设是正确的吗?).但是,我认为我应该关闭BufferedReader我创造的; 但是这样做,我相信它会自动关闭所有其他组成的流,包括inStream.
有没有人看到我关闭BufferedReader和InputStreamReader创建的方式,而不是关闭InputStream传递给我的方法?也许有一种方法可以InputStream在我包装它之前制作一份副本?谢谢
我有一些大文件(图像和视频),我需要存储在内容提供商.android文档表明......
如果您公开的字节数据太大而无法放入表本身 - 例如大型位图文件 - 将数据公开给客户端的字段实际上应该包含content:URI字符串.这是允许客户端访问数据文件的字段.该记录还应该有另一个名为"_data"的字段,该字段列出设备上该文件的确切文件路径.此字段不是由客户端读取,而是由ContentResolver读取.客户端将在面向用户的字段上调用ContentResolver.openInputStream(),该字段包含项目的URI.ContentResolver将为该记录请求"_data"字段,并且因为它具有比客户端更高的权限,所以它应该能够直接访问该文件并将该文件的读取包装器返回给客户端. - http://developer.android.com/guide/topics/providers/content-providers.html#creating
我找一个例子有点困难.特别是我希望在ImageView的上下文中使用位图.考虑以下代码准代码(它不起作用)......
ImageView iv = ....
String iconUri = cursor.getString(cursor.getColumnIndex(Table.ICON));
iv.setImageURI(Uri.parse(iconUri));
Run Code Online (Sandbox Code Playgroud)
意见/问题...
setImageURI实现使用内容解析openInputStream,所以这应该工作.
String scheme = mUri.getScheme();
...
} else if (ContentResolver.SCHEME_CONTENT.equals(scheme)
|| ContentResolver.SCHEME_FILE.equals(scheme)) {
try {
d = Drawable.createFromStream(
mContext.getContentResolver().openInputStream(mUri),
null);
Run Code Online (Sandbox Code Playgroud)
--frameworks /碱/核心/ JAVA /机器人/插件/ ImageView.java
我搞定了.我从MediaStore和MediaProvider中提取了一些提示.包含数据的文件根据内容提供者(目录),列名,行ID和媒体类型命名.然后内容解析器获取文件描述符,如此...
Uri iconUri = Uri.withAppendedPath(Table.getUri(cursor), Table.ICON);
ib.setImageURI(iconUri);
Run Code Online (Sandbox Code Playgroud)
......内容提供商以实物回应......
@Override
public ParcelFileDescriptor openFile (Uri uri, String mode) {
int imode = 0;
if (mode.contains("w")) imode |= ParcelFileDescriptor.MODE_WRITE_ONLY;
if (mode.contains("r")) imode |= ParcelFileDescriptor.MODE_READ_ONLY;
if (mode.contains("+")) imode |= …Run Code Online (Sandbox Code Playgroud) android inputstream android-contentresolver android-contentprovider
我正在使用servlet上传图像.要执行调整大小操作,我将InputStream转换为BufferedImage.现在我想将它保存在mongoDB中.因为,据我所知,我是mongoDB的新手,GridFS采用InputStream.
那么,有没有办法将BufferedImage转换为InputStream?
我尝试在手机上将文件下载到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)
Run Code Online (Sandbox Code Playgroud)
我下载文件的方法:
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) url.openConnection();
urlConnection.setRequestMethod("GET");
urlConnection.setDoOutput(true);
urlConnection.connect();
// File cacheDir = appContext.getExternalCacheDir();
// File file = new File("/mnt/sdcard", "/cacheFile.ext");
File SDCardRoot = Environment.getExternalStorageDirectory();
File file = new File(SDCardRoot,"/cacheFile.ext"); …Run Code Online (Sandbox Code Playgroud) 我必须按字符读取53 MB的文件.当我使用ifstream在C++中完成它时,它在几毫秒内完成,但使用Java InputStream需要几分钟.Java很慢或者我错过了什么是正常的吗?
另外,我需要用Java完成程序(它使用servlet,我必须从中调用处理这些字符的函数).我想也许用C或C++编写文件处理部分,然后用Java Native Interface将这些函数与我的Java程序连接......这个想法怎么样?
任何人都可以给我任何其他提示......我真的需要更快地阅读文件.我尝试使用缓冲输入,但它仍然没有提供甚至接近C++的性能.
编辑:我的代码跨越几个文件,它非常脏,所以我给出了概要
import java.io.*;
public class tmp {
public static void main(String args[]) {
try{
InputStream file = new BufferedInputStream(new FileInputStream("1.2.fasta"));
char ch;
while(file.available()!=0) {
ch = (char)file.read();
/* Do processing */
}
System.out.println("DONE");
file.close();
}catch(Exception e){}
}
}
Run Code Online (Sandbox Code Playgroud) .zip文件中有多个文件,我正在尝试获取.尝试解压缩文件提供了java.lang.IllegalStateException:zis.nextEntry不能为null.怎么做正确的方法?
@Throws(IOException::class)
fun unzip(zipFile: File, targetDirectory: File) {
val zis = ZipInputStream(
BufferedInputStream(FileInputStream(zipFile)))
try {
var ze: ZipEntry
var count: Int
val buffer = ByteArray(8192)
ze = zis.nextEntry
while (ze != null) {
val file = File(targetDirectory, ze.name)
val dir = if (ze.isDirectory) file else file.parentFile
if (!dir.isDirectory && !dir.mkdirs())
throw FileNotFoundException("Failed to ensure directory: " + dir.absolutePath)
if (ze.isDirectory)
continue
val fout = FileOutputStream(file)
try {
count = zis.read(buffer)
while (count != -1) {
fout.write(buffer, 0, count)
count = …Run Code Online (Sandbox Code Playgroud) 我有一个InputStream,我正在读取字符.我希望多个读者访问此InputStream.似乎一种合理的方法是将传入的数据写入StringBuffer或StringBuilder,并让多个读者读取它.不幸的是,不推荐使用StringBufferInputStream.StringReader读取一个字符串,而不是一个不断更新的可变对象.我有什么选择?写我自己的?
我知道一般的想法,但我不确定它是否有影响,因为Android api声明如下:"刷新此流.此方法的实现应确保写出任何缓冲的数据.此实现什么都不做."
这种实现没有任何作用< - 这是否意味着它无用或者我错过了什么?
我在Java中有URI对象.我想将其转换为InputStream,但转换应该依赖于协议.如果我的URI是这样的话,我可以这样做http://somepath.com/mysuperfile.xsl:
return myURI.toURL().openConnection().getInputStream();
Run Code Online (Sandbox Code Playgroud)
或者这样,如果我的uri是file:///somepath/mysuperfile.xsl:
return new FileInputStream(Paths.get(myURI).toFile());
Run Code Online (Sandbox Code Playgroud)
或者甚至是另一种方式.我可以尝试手动检查它,但Java有一些很好/正确的方法来检查它,也许使用新的java.nio.*包?
inputstream ×10
java ×8
android ×4
deprecated ×1
io ×1
kotlin ×1
large-files ×1
outputstream ×1
string ×1
uri ×1
url ×1