How to read all objects from ObjectInputStream
I have a file with some info how can I read all info?
Name names;
try (FileInputStream fileInputStream = new FileInputStream(file)) {
ObjectInputStream objectInputStream = new ObjectInputStream(fileInputStream);
names = (Name) objectInputStream.readObject();
} catch (IOException | ClassNotFoundException e) {
e.printStackTrace();
}
java file
add a comment |
I have a file with some info how can I read all info?
Name names;
try (FileInputStream fileInputStream = new FileInputStream(file)) {
ObjectInputStream objectInputStream = new ObjectInputStream(fileInputStream);
names = (Name) objectInputStream.readObject();
} catch (IOException | ClassNotFoundException e) {
e.printStackTrace();
}
java file
please check this link to know how to ask a question.
– JSmith
Nov 25 '18 at 12:01
If you are referring to serialization, I believe one stream can be one object. It can be a composite of multiple object (e.g. ArrayList), but a single object nevertheless.
– Sid
Nov 25 '18 at 12:04
I tried add objects into HashSet but had an exception java.io.StreamCorruptedException: invalid type code: AC. I input name using scanner and than I need to check if name already exist.
– Oppo
Nov 25 '18 at 12:09
add a comment |
I have a file with some info how can I read all info?
Name names;
try (FileInputStream fileInputStream = new FileInputStream(file)) {
ObjectInputStream objectInputStream = new ObjectInputStream(fileInputStream);
names = (Name) objectInputStream.readObject();
} catch (IOException | ClassNotFoundException e) {
e.printStackTrace();
}
java file
I have a file with some info how can I read all info?
Name names;
try (FileInputStream fileInputStream = new FileInputStream(file)) {
ObjectInputStream objectInputStream = new ObjectInputStream(fileInputStream);
names = (Name) objectInputStream.readObject();
} catch (IOException | ClassNotFoundException e) {
e.printStackTrace();
}
java file
java file
edited Nov 25 '18 at 12:02
JSmith
1,49311226
1,49311226
asked Nov 25 '18 at 11:51
OppoOppo
85
85
please check this link to know how to ask a question.
– JSmith
Nov 25 '18 at 12:01
If you are referring to serialization, I believe one stream can be one object. It can be a composite of multiple object (e.g. ArrayList), but a single object nevertheless.
– Sid
Nov 25 '18 at 12:04
I tried add objects into HashSet but had an exception java.io.StreamCorruptedException: invalid type code: AC. I input name using scanner and than I need to check if name already exist.
– Oppo
Nov 25 '18 at 12:09
add a comment |
please check this link to know how to ask a question.
– JSmith
Nov 25 '18 at 12:01
If you are referring to serialization, I believe one stream can be one object. It can be a composite of multiple object (e.g. ArrayList), but a single object nevertheless.
– Sid
Nov 25 '18 at 12:04
I tried add objects into HashSet but had an exception java.io.StreamCorruptedException: invalid type code: AC. I input name using scanner and than I need to check if name already exist.
– Oppo
Nov 25 '18 at 12:09
please check this link to know how to ask a question.
– JSmith
Nov 25 '18 at 12:01
please check this link to know how to ask a question.
– JSmith
Nov 25 '18 at 12:01
If you are referring to serialization, I believe one stream can be one object. It can be a composite of multiple object (e.g. ArrayList), but a single object nevertheless.
– Sid
Nov 25 '18 at 12:04
If you are referring to serialization, I believe one stream can be one object. It can be a composite of multiple object (e.g. ArrayList), but a single object nevertheless.
– Sid
Nov 25 '18 at 12:04
I tried add objects into HashSet but had an exception java.io.StreamCorruptedException: invalid type code: AC. I input name using scanner and than I need to check if name already exist.
– Oppo
Nov 25 '18 at 12:09
I tried add objects into HashSet but had an exception java.io.StreamCorruptedException: invalid type code: AC. I input name using scanner and than I need to check if name already exist.
– Oppo
Nov 25 '18 at 12:09
add a comment |
1 Answer
1
active
oldest
votes
You have several solution, all depending on the input:
You can iterate until the stream is fully consumed: I think that is the worse solution out of those I provide you. It is worse because you are checking if EOF was reached, whilst you should know when you're done (eg: your file format is wrong).
Set<Name> result = new HashSet<>();
try {
for (;;) {
result.add((Name)objectInputStream.readObject());
}
} catch (EOFException e) {
// End of stream
}
return result;
When producing the input, serialize a collection and invoke
readObject()
on it.Serialization
should be able to read the collection, as long as each object implementsSerializable
.
static void write(Path path, Set<Name> names) throws IOException {
try (OutputStream os = Files.newOutputStream(path);
ObjectOutputStream oos = new ObjectOutputStream(os)) {
oos.writeObject(names);
}
}
static Set<Name> read(Path path) throws IOException {
try (InputStream is = Files.newInputStream(path);
ObjectInputStream ois = new ObjectInputStream(is)) {
// WARN Files.newInputStream is not buffered; ObjectInputStream might
// be buffered (I don't remember).
return (Set<Name>) ois.readObject();
}
}
When producing the input, you can add a
int
indicating the number of object to read, and iterate over it: this is useful in case where you don't really care of the collection (HashSet
). The resulting file will be smaller (because you won't have theHashSet
metadata).
int result = objectInputStream.readInt();
Name names = new Name[result]; // do some check on result!
for (int i = 0; i < result; ++i) {
names[i] = (Name) objectInputStream.readObject();
}
Also, Set
are good, but since they remove duplicate using hashCode()
/equals()
you may get less object if your definition of equals
/hashCode
changed after the fact (example: your Name
was case sensitive and now it is not, eg: new Name("AA").equals(new Name("aa"))
).
I tried your code and I got an java.io.EOFException
– Oppo
Nov 25 '18 at 12:21
That's good, this means that you reached the end of the file, there are no more object to read. Handle this exception properly, like printing a message saying "All the objects read" or something...
– Themelis
Nov 25 '18 at 12:22
And instead of array I can use HashSet? and print it to console?
– Oppo
Nov 25 '18 at 12:28
I fixed my example. Beside, converting an array to a collection should not be a problem if you are tackling serialization.
– NoDataFound
Nov 25 '18 at 18:34
add a comment |
Your Answer
StackExchange.ifUsing("editor", function () {
StackExchange.using("externalEditor", function () {
StackExchange.using("snippets", function () {
StackExchange.snippets.init();
});
});
}, "code-snippets");
StackExchange.ready(function() {
var channelOptions = {
tags: "".split(" "),
id: "1"
};
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function() {
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled) {
StackExchange.using("snippets", function() {
createEditor();
});
}
else {
createEditor();
}
});
function createEditor() {
StackExchange.prepareEditor({
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader: {
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
},
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
});
}
});
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53467133%2fhow-to-read-all-objects-from-objectinputstream%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
1 Answer
1
active
oldest
votes
1 Answer
1
active
oldest
votes
active
oldest
votes
active
oldest
votes
You have several solution, all depending on the input:
You can iterate until the stream is fully consumed: I think that is the worse solution out of those I provide you. It is worse because you are checking if EOF was reached, whilst you should know when you're done (eg: your file format is wrong).
Set<Name> result = new HashSet<>();
try {
for (;;) {
result.add((Name)objectInputStream.readObject());
}
} catch (EOFException e) {
// End of stream
}
return result;
When producing the input, serialize a collection and invoke
readObject()
on it.Serialization
should be able to read the collection, as long as each object implementsSerializable
.
static void write(Path path, Set<Name> names) throws IOException {
try (OutputStream os = Files.newOutputStream(path);
ObjectOutputStream oos = new ObjectOutputStream(os)) {
oos.writeObject(names);
}
}
static Set<Name> read(Path path) throws IOException {
try (InputStream is = Files.newInputStream(path);
ObjectInputStream ois = new ObjectInputStream(is)) {
// WARN Files.newInputStream is not buffered; ObjectInputStream might
// be buffered (I don't remember).
return (Set<Name>) ois.readObject();
}
}
When producing the input, you can add a
int
indicating the number of object to read, and iterate over it: this is useful in case where you don't really care of the collection (HashSet
). The resulting file will be smaller (because you won't have theHashSet
metadata).
int result = objectInputStream.readInt();
Name names = new Name[result]; // do some check on result!
for (int i = 0; i < result; ++i) {
names[i] = (Name) objectInputStream.readObject();
}
Also, Set
are good, but since they remove duplicate using hashCode()
/equals()
you may get less object if your definition of equals
/hashCode
changed after the fact (example: your Name
was case sensitive and now it is not, eg: new Name("AA").equals(new Name("aa"))
).
I tried your code and I got an java.io.EOFException
– Oppo
Nov 25 '18 at 12:21
That's good, this means that you reached the end of the file, there are no more object to read. Handle this exception properly, like printing a message saying "All the objects read" or something...
– Themelis
Nov 25 '18 at 12:22
And instead of array I can use HashSet? and print it to console?
– Oppo
Nov 25 '18 at 12:28
I fixed my example. Beside, converting an array to a collection should not be a problem if you are tackling serialization.
– NoDataFound
Nov 25 '18 at 18:34
add a comment |
You have several solution, all depending on the input:
You can iterate until the stream is fully consumed: I think that is the worse solution out of those I provide you. It is worse because you are checking if EOF was reached, whilst you should know when you're done (eg: your file format is wrong).
Set<Name> result = new HashSet<>();
try {
for (;;) {
result.add((Name)objectInputStream.readObject());
}
} catch (EOFException e) {
// End of stream
}
return result;
When producing the input, serialize a collection and invoke
readObject()
on it.Serialization
should be able to read the collection, as long as each object implementsSerializable
.
static void write(Path path, Set<Name> names) throws IOException {
try (OutputStream os = Files.newOutputStream(path);
ObjectOutputStream oos = new ObjectOutputStream(os)) {
oos.writeObject(names);
}
}
static Set<Name> read(Path path) throws IOException {
try (InputStream is = Files.newInputStream(path);
ObjectInputStream ois = new ObjectInputStream(is)) {
// WARN Files.newInputStream is not buffered; ObjectInputStream might
// be buffered (I don't remember).
return (Set<Name>) ois.readObject();
}
}
When producing the input, you can add a
int
indicating the number of object to read, and iterate over it: this is useful in case where you don't really care of the collection (HashSet
). The resulting file will be smaller (because you won't have theHashSet
metadata).
int result = objectInputStream.readInt();
Name names = new Name[result]; // do some check on result!
for (int i = 0; i < result; ++i) {
names[i] = (Name) objectInputStream.readObject();
}
Also, Set
are good, but since they remove duplicate using hashCode()
/equals()
you may get less object if your definition of equals
/hashCode
changed after the fact (example: your Name
was case sensitive and now it is not, eg: new Name("AA").equals(new Name("aa"))
).
I tried your code and I got an java.io.EOFException
– Oppo
Nov 25 '18 at 12:21
That's good, this means that you reached the end of the file, there are no more object to read. Handle this exception properly, like printing a message saying "All the objects read" or something...
– Themelis
Nov 25 '18 at 12:22
And instead of array I can use HashSet? and print it to console?
– Oppo
Nov 25 '18 at 12:28
I fixed my example. Beside, converting an array to a collection should not be a problem if you are tackling serialization.
– NoDataFound
Nov 25 '18 at 18:34
add a comment |
You have several solution, all depending on the input:
You can iterate until the stream is fully consumed: I think that is the worse solution out of those I provide you. It is worse because you are checking if EOF was reached, whilst you should know when you're done (eg: your file format is wrong).
Set<Name> result = new HashSet<>();
try {
for (;;) {
result.add((Name)objectInputStream.readObject());
}
} catch (EOFException e) {
// End of stream
}
return result;
When producing the input, serialize a collection and invoke
readObject()
on it.Serialization
should be able to read the collection, as long as each object implementsSerializable
.
static void write(Path path, Set<Name> names) throws IOException {
try (OutputStream os = Files.newOutputStream(path);
ObjectOutputStream oos = new ObjectOutputStream(os)) {
oos.writeObject(names);
}
}
static Set<Name> read(Path path) throws IOException {
try (InputStream is = Files.newInputStream(path);
ObjectInputStream ois = new ObjectInputStream(is)) {
// WARN Files.newInputStream is not buffered; ObjectInputStream might
// be buffered (I don't remember).
return (Set<Name>) ois.readObject();
}
}
When producing the input, you can add a
int
indicating the number of object to read, and iterate over it: this is useful in case where you don't really care of the collection (HashSet
). The resulting file will be smaller (because you won't have theHashSet
metadata).
int result = objectInputStream.readInt();
Name names = new Name[result]; // do some check on result!
for (int i = 0; i < result; ++i) {
names[i] = (Name) objectInputStream.readObject();
}
Also, Set
are good, but since they remove duplicate using hashCode()
/equals()
you may get less object if your definition of equals
/hashCode
changed after the fact (example: your Name
was case sensitive and now it is not, eg: new Name("AA").equals(new Name("aa"))
).
You have several solution, all depending on the input:
You can iterate until the stream is fully consumed: I think that is the worse solution out of those I provide you. It is worse because you are checking if EOF was reached, whilst you should know when you're done (eg: your file format is wrong).
Set<Name> result = new HashSet<>();
try {
for (;;) {
result.add((Name)objectInputStream.readObject());
}
} catch (EOFException e) {
// End of stream
}
return result;
When producing the input, serialize a collection and invoke
readObject()
on it.Serialization
should be able to read the collection, as long as each object implementsSerializable
.
static void write(Path path, Set<Name> names) throws IOException {
try (OutputStream os = Files.newOutputStream(path);
ObjectOutputStream oos = new ObjectOutputStream(os)) {
oos.writeObject(names);
}
}
static Set<Name> read(Path path) throws IOException {
try (InputStream is = Files.newInputStream(path);
ObjectInputStream ois = new ObjectInputStream(is)) {
// WARN Files.newInputStream is not buffered; ObjectInputStream might
// be buffered (I don't remember).
return (Set<Name>) ois.readObject();
}
}
When producing the input, you can add a
int
indicating the number of object to read, and iterate over it: this is useful in case where you don't really care of the collection (HashSet
). The resulting file will be smaller (because you won't have theHashSet
metadata).
int result = objectInputStream.readInt();
Name names = new Name[result]; // do some check on result!
for (int i = 0; i < result; ++i) {
names[i] = (Name) objectInputStream.readObject();
}
Also, Set
are good, but since they remove duplicate using hashCode()
/equals()
you may get less object if your definition of equals
/hashCode
changed after the fact (example: your Name
was case sensitive and now it is not, eg: new Name("AA").equals(new Name("aa"))
).
edited Nov 25 '18 at 22:06
answered Nov 25 '18 at 12:13
NoDataFoundNoDataFound
5,8211841
5,8211841
I tried your code and I got an java.io.EOFException
– Oppo
Nov 25 '18 at 12:21
That's good, this means that you reached the end of the file, there are no more object to read. Handle this exception properly, like printing a message saying "All the objects read" or something...
– Themelis
Nov 25 '18 at 12:22
And instead of array I can use HashSet? and print it to console?
– Oppo
Nov 25 '18 at 12:28
I fixed my example. Beside, converting an array to a collection should not be a problem if you are tackling serialization.
– NoDataFound
Nov 25 '18 at 18:34
add a comment |
I tried your code and I got an java.io.EOFException
– Oppo
Nov 25 '18 at 12:21
That's good, this means that you reached the end of the file, there are no more object to read. Handle this exception properly, like printing a message saying "All the objects read" or something...
– Themelis
Nov 25 '18 at 12:22
And instead of array I can use HashSet? and print it to console?
– Oppo
Nov 25 '18 at 12:28
I fixed my example. Beside, converting an array to a collection should not be a problem if you are tackling serialization.
– NoDataFound
Nov 25 '18 at 18:34
I tried your code and I got an java.io.EOFException
– Oppo
Nov 25 '18 at 12:21
I tried your code and I got an java.io.EOFException
– Oppo
Nov 25 '18 at 12:21
That's good, this means that you reached the end of the file, there are no more object to read. Handle this exception properly, like printing a message saying "All the objects read" or something...
– Themelis
Nov 25 '18 at 12:22
That's good, this means that you reached the end of the file, there are no more object to read. Handle this exception properly, like printing a message saying "All the objects read" or something...
– Themelis
Nov 25 '18 at 12:22
And instead of array I can use HashSet? and print it to console?
– Oppo
Nov 25 '18 at 12:28
And instead of array I can use HashSet? and print it to console?
– Oppo
Nov 25 '18 at 12:28
I fixed my example. Beside, converting an array to a collection should not be a problem if you are tackling serialization.
– NoDataFound
Nov 25 '18 at 18:34
I fixed my example. Beside, converting an array to a collection should not be a problem if you are tackling serialization.
– NoDataFound
Nov 25 '18 at 18:34
add a comment |
Thanks for contributing an answer to Stack Overflow!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53467133%2fhow-to-read-all-objects-from-objectinputstream%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
please check this link to know how to ask a question.
– JSmith
Nov 25 '18 at 12:01
If you are referring to serialization, I believe one stream can be one object. It can be a composite of multiple object (e.g. ArrayList), but a single object nevertheless.
– Sid
Nov 25 '18 at 12:04
I tried add objects into HashSet but had an exception java.io.StreamCorruptedException: invalid type code: AC. I input name using scanner and than I need to check if name already exist.
– Oppo
Nov 25 '18 at 12:09