我正在从URL检索XML feed然后解析它.我需要做的是将内部存储到手机中,这样当没有互联网连接时,它可以解析保存的选项而不是实时选项.
我面临的问题是我可以创建url对象,使用getInputStream来获取内容,但它不会让我保存它.
URL url = null;
InputStream inputStreamReader = null;
XmlPullParser xpp = null;
url = new URL("http://*********");
inputStreamReader = getInputStream(url);
ObjectOutput out = new ObjectOutputStream(new FileOutputStream(new File(getCacheDir(),"")+"cacheFileAppeal.srl"));
//--------------------------------------------------------
//This line is where it is erroring.
//--------------------------------------------------------
out.writeObject( inputStreamReader );
//--------------------------------------------------------
out.close();
Run Code Online (Sandbox Code Playgroud)
任何想法如何保存输入流,以便我以后加载它.
干杯
我最近发现了这个成语,我想知道是否有我遗失的东西.我从来没有见过它.我在野外工作的几乎所有Java代码都倾向于将数据压入字符串或缓冲区,而不是像这个例子(例如使用HttpClient和XML API):
final LSOutput output; // XML stuff initialized elsewhere
final LSSerializer serializer;
final Document doc;
// ...
PostMethod post; // HttpClient post request
final PipedOutputStream source = new PipedOutputStream();
PipedInputStream sink = new PipedInputStream(source);
// ...
executor.execute(new Runnable() {
public void run() {
output.setByteStream(source);
serializer.write(doc, output);
try {
source.close();
} catch (IOException e) {
throw new RuntimeException(e);
}
}});
post.setRequestEntity(new InputStreamRequestEntity(sink));
int status = httpClient.executeMethod(post);
Run Code Online (Sandbox Code Playgroud)
该代码使用Unix管道样式技术来防止XML数据的多个副本保留在内存中.它使用HTTP Post输出流和DOM Load/Save API将XML Document序列化为HTTP请求的内容.至于我可以告诉它最大限度地减少用很少的额外代码使用的内存(只是几行了Runnable,PipedInputStream和PipedOutputStream).
那么,这个成语有什么问题?如果这个成语没有错,为什么我没有看到它?
编辑:澄清PipedInputStream …
我正在尝试新的Gmail API,示例使用java.nio.file包中的类,ei Files和FileSystems.
这些类是在Java jdk 1.7中引入的,因为我在我的Android应用程序中运行jdk 1.7.0_65,我不知道为什么Android Studio找不到这些类.
进口是:
import java.nio.file.FileSystems;
import java.nio.file.Files;
Run Code Online (Sandbox Code Playgroud)
我的build.gradle文件当然告诉系统像这样使用v.1.7
android {
compileSdkVersion 19
buildToolsVersion '20'
...
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_7
targetCompatibility JavaVersion.VERSION_1_7
}
}
Run Code Online (Sandbox Code Playgroud)
我指向jdk的正确目录:

jdk列在"外部库"部分中:

如果我浏览Java文件,我甚至可以找到java.nio.file.Files和.FileSystems:

现在,****正在发生什么!?根据我的理解,我在这里做的一切,有什么建议吗?
FileInputStream in = new FileInputStream(myFile);
ByteArrayOutputStream out = new ByteArrayOutputStream();
Run Code Online (Sandbox Code Playgroud)
问:我怎样才能读到的一切,从in进入out的方式是不是一个手工制作的循环用我自己的字节的缓冲区?
我正在开发一个依赖于ELF二进制文件的Android应用程序:我们的Java代码与这个二进制文件交互以完成任务.需要在Application启动和应用程序退出/按需启动和终止此运行时.
问题:
我假设我们将能够使用Runtime.exec()API执行此二进制文件.对于我需要将库放在文件夹结构中的位置有什么限制吗?系统运行时如何找到此可执行文件?是否有某种类路径设置?
由于应用程序依赖于此运行时,因此我考虑将其包装在服务中,以便可以根据需要启动或停止它.在Android项目中处理此类可执行文件的最佳方法是什么?
假设我没有此可执行文件的源代码,还有什么其他选择?
请指教.
谢谢.
我试图找到将InputStream传递给OutputStream的最佳方法.我没有选择使用任何其他库,如Apache IO.这是片段和输出.
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.nio.channels.FileChannel;
public class Pipe {
public static void main(String[] args) throws Exception {
for(PipeTestCase testCase : testCases) {
System.out.println(testCase.getApproach());
InputStream is = new FileInputStream("D:\\in\\lft_.txt");
OutputStream os = new FileOutputStream("D:\\in\\out.txt");
long start = System.currentTimeMillis();
testCase.pipe(is, os);
long end = System.currentTimeMillis();
System.out.println("Execution Time = " + (end - start) + " millis");
System.out.println("============================================");
is.close();
os.close();
}
}
private static PipeTestCase[] testCases = {
new PipeTestCase("Fixed Buffer Read") {
@Override …Run Code Online (Sandbox Code Playgroud) 我试图通过使用Maven Shade Plugin's 来最小化UberJar的大小minimizeJar.它看起来minimizeJar只包含在代码中静态导入的类(我怀疑这是因为我LogFactory.class在uber jar中看到org\apache\commons\logging\但是没有impl包含类的包,因此java.lang.ClassNotFoundException: org.apache.commons.logging.impl.LogFactoryImpl当我运行uber-jar时抛出).
有什么方法我可以告诉Maven的Shade插件将指定的包包含到最终的jar中,无论minimizeJar建议是什么?
这里是我正在尝试的pom片段:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>1.5</version>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
<configuration>
<minimizeJar>true</minimizeJar>
<filters>
<filter>
<artifact>commons-logging:commons-logging</artifact>
<includes>
<include>org/apache/commons/logging/**</include>
</includes>
</filter>
</filters>
<transformers>
<transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
<mainClass>com.myproject.Main</mainClass>
</transformer>
</transformers>
</configuration>
</execution>
</executions>
</plugin>
Run Code Online (Sandbox Code Playgroud) 有没有人有创建Java中的管道对象,任何好的建议是两者的InputStream和OutputStream,因为Java没有多重继承和两个流是抽象类,而不是接口?
基本需求是有一个对象可以传递给需要InputStream或OutputStream的东西来管道从一个线程输出到另一个线程的输入.
我正在使用javamail,我无法从我的Gmail电子邮件中获取HTML.我有以下内容:
Session session = Session.getDefaultInstance(props, null);
Store store = session.getStore("imaps");
store.connect("imap.gmail.com", "myemail@gmail.com", "password");
System.out.println(store);
Folder inbox = store.getFolder("Inbox");
inbox.open(Folder.READ_ONLY);
Message messages[] = inbox.getMessages();
for(Message message:messages) {
System.out.println(message); // com.sun.mail.imap.IMAPInputStream@cec0c5
Run Code Online (Sandbox Code Playgroud)
以上一切正常,但我无法打印或获取实际的HTML或文本电子邮件.我只是得到某种InputStream,我如何轻松处理这个以获取电子邮件的原始HTML?
我也试过循环阅读消息,但这并没有让我走得太远:
Message message[] = inbox.getMessages();
for (int i=0, n=message.length; i<n; i++) {
System.out.println(i + ": " + message[i].getFrom()[0]
+ "\t" + message[i].getSubject());
String content = message[i].getContent().toString();
if (content.length() > 200)
content = content.substring(0, 600);
System.out.print(content);
Run Code Online (Sandbox Code Playgroud)
}
非常感谢所有的hlep.
这应该非常简单,我搜索过谷歌,但没有看到有人提到我注意到的问题.我见过的所有东西都是基本相同的东西.像这样:
byte [] buffer = new byte[256];
int bytesRead = 0;
while((bytesRead = input.read(buffer)) != -1)
{
output.write(buffer, 0, bytesRead);
}
Run Code Online (Sandbox Code Playgroud)
我知道当达到EOF时read()返回-1,但是如果文件小于缓冲区甚至相同大小怎么办?例如,正在读入一个200字节的文件.我假设它读取了200个字节,但返回-1.这与javadocs匹配,但它也意味着永远不会调用write().我本来希望实际告诉我它读取200个字节,并在下一次迭代时返回-1.
我该如何解决这个"问题"?
我正在尝试使用我运行程序的计算机的默认图像查看器打开一个打包在.jar文件中的图像文件.
我已经找到了许多关于如何使用InputStream访问打包在jar中的文件的答案,但是如何使用该InputStream打开这些文件?
InputStream imageStream = Test.class.getClass().getResourceAsStream("/test/DSC_6283.jpg");
Run Code Online (Sandbox Code Playgroud)
我可以将其转换为Image,ImageIcon或者BufferedImage如何在默认图像查看器中进一步打开图像?
我的班级名称是"测试",我想要访问的图像是 C:\Users\Pranav\Documents\NetBeansProjects\Test\src\test\DSC_6283.jpg
任何帮助,将不胜感激.
我正在尝试将图像(png,jpg,tiff,gif)转换为磁盘上的文件。当我将其存储在文件中后查看它时,我看不到该文件。
这是我根据其他论坛讨论尝试过的一些代码:
byte[] inFileName = org.apache.commons.io.FileUtils.readFileToByteArray(new File("c:/test1.png"));
InputStream inputStream = new ByteArrayInputStream(inFilename);
..String fileName="test.png";
Writer writer = new FileWriter(fileName);
IOUtils.copy(inputStream, writer,"ISO-8859-1");
Run Code Online (Sandbox Code Playgroud)
这会创建一个我看不到的 png 文件。
我尝试根据其他一些讨论使用 ImageIO,但无法使其工作。感谢任何帮助。
Image inImage = ImageIO.read(new ByteArrayInputStream(inFilename));
BufferedImage outImage = new BufferedImage(100, 100,
BufferedImage.TYPE_INT_RGB);
OutputStream os = new FileOutputStream(fileName);
JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(os);
//encoder.encode(inImage);
Run Code Online (Sandbox Code Playgroud) 我有一个对象,在这个对象中我有一个包含文件的InputStream.
我想将InputStream内部的内容写入文件夹内的文件.
我将如何在Core Java中执行此操作?
我能够使用BufferedReader和.readLine()打印出InputStream的每一行,但是我希望整个文件写入磁盘而不仅仅是内部的文件.
希望这是有道理的,谢谢.