Class ASCIIGraph
- All Implemented Interfaces:
FlyweightPrototype<ImmutableGraph>
public class ASCIIGraph extends ImmutableSequentialGraph
ImmutableGraph
that corresponds to graphs stored in a human-readable
ASCII format where each line contains the list of successors of a given node.
The file format is as follows: the graph is stored in a file named basename.graph-txt
.
The first line contains the number of nodes, n. Then, n lines follow, the i-th
line containing the successors of node i in increasing order
(nodes are numbered from 0 to n−1).
Successors are separated by a single space.
Contrarily to other classes, the load methods of this class do not always return instances of this class.
In particular, loadOffline(CharSequence)
and loadOnce(InputStream)
will return an instance of this class for
offline access. The instance will not provide random access, but sequential access will be backed by
the original text file and only one array of successor will be loaded in core memory at any time.
The load(CharSequence)
method, on the other hand, will return an instance of
ArrayListMutableGraph
built by copying an offline instance of this class.
Using ASCIIGraph
to convert your data
A simple (albeit rather inefficient) way to import data into WebGraph is using ASCII graphs. Suppose you
create the following file, named example.graph-txt
:
2 1 0 1Then, the command
java it.unimi.dsi.webgraph.BVGraph -g ASCIIGraph example bvexamplewill produce a compressed graph in
BVGraph
format
with basename bvexample
. Even more convenient is the loadOnce(InputStream)
method, which reads from an input stream an ASCII graph and exposes it for a single traversal. It
can be used, for instance, with the main method of BVGraph
to
generate somehow an ASCII graph and store it in compressed form on the fly. The previous
example could be then rewritten as
java it.unimi.dsi.webgraph.BVGraph -1 -g ASCIIGraph dummy bvexample <example.graph-txt
-
Nested Class Summary
Nested classes/interfaces inherited from class it.unimi.dsi.webgraph.ImmutableGraph
ImmutableGraph.LoadMethod
-
Field Summary
Fields inherited from class it.unimi.dsi.webgraph.ImmutableGraph
GRAPHCLASS_PROPERTY_KEY, NUMBER_OF_THREADS_PROPERTY, PROPERTIES_EXTENSION
-
Constructor Summary
Constructors Modifier Constructor Description ASCIIGraph(InputStream is)
Creates a read-once ASCII graph.protected
ASCIIGraph(CharSequence graphFile)
-
Method Summary
Modifier and Type Method Description static ImmutableGraph
load(CharSequence basename)
static ImmutableGraph
load(CharSequence basename, ProgressLogger unused)
static ASCIIGraph
loadMapped(CharSequence basename)
static ASCIIGraph
loadMapped(CharSequence basename, ProgressLogger unused)
static ASCIIGraph
loadOffline(CharSequence basename)
static ASCIIGraph
loadOffline(CharSequence basename, ProgressLogger unused)
static ASCIIGraph
loadOnce(InputStream is)
static ImmutableGraph
loadSequential(CharSequence basename)
Deprecated.static ASCIIGraph
loadSequential(CharSequence basename, ProgressLogger unused)
Deprecated.static void
main(String[] args)
NodeIterator
nodeIterator(int from)
Returns a node iterator for scanning the graph sequentially, starting from the given node.int
numNodes()
Returns the number of nodes of this graph.NodeIterator[]
splitNodeIterators(int howMany)
Returns an array of node iterators, scanning each a portion of the nodes of a graph.static void
store(ImmutableGraph graph, int shift, CharSequence basename)
static void
store(ImmutableGraph graph, CharSequence basename)
static void
store(ImmutableGraph graph, CharSequence basename, ProgressLogger unused)
Methods inherited from class it.unimi.dsi.webgraph.ImmutableSequentialGraph
copy, outdegree, randomAccess, successorArray
Methods inherited from class it.unimi.dsi.webgraph.ImmutableGraph
basename, equals, hasCopiableIterators, hashCode, load, nodeIterator, numArcs, outdegrees, store, store, successors, toString
-
Constructor Details
-
ASCIIGraph
- Throws:
NumberFormatException
IOException
-
ASCIIGraph
Creates a read-once ASCII graph. Instances created using this constructor can be only accessed using a single call tonodeIterator(int)
.- Parameters:
is
- an input stream containing an ASCII graph.- Throws:
NumberFormatException
IOException
-
-
Method Details
-
numNodes
public int numNodes()Description copied from class:ImmutableGraph
Returns the number of nodes of this graph.Albeit this method is not optional, it is allowed that this method throws an
UnsupportedOperationException
if this graph has never been entirely traversed using anode iterator
. This apparently bizarre behaviour is necessary to support implementations asArcListASCIIGraph
, which do not know the actual number of nodes until a traversal has been completed.- Specified by:
numNodes
in classImmutableGraph
- Returns:
- the number of nodes.
-
nodeIterator
Description copied from class:ImmutableGraph
Returns a node iterator for scanning the graph sequentially, starting from the given node.- Overrides:
nodeIterator
in classImmutableSequentialGraph
- Parameters:
from
- the node from which the iterator will iterate.- Returns:
- a
NodeIterator
for accessing nodes and successors sequentially.
-
splitNodeIterators
Description copied from class:ImmutableGraph
Returns an array of node iterators, scanning each a portion of the nodes of a graph. Iterators are guaranteed to scan mutually disjoint sets of nodes, and every node is guaranteed to be scanned by one iterator.This is an optional operation. If implemented, though, the returned iterators must properly implement
NodeIterator.copy(int)
.- Overrides:
splitNodeIterators
in classImmutableGraph
- Parameters:
howMany
- the number of iterators to be returned (at the end of the array, some of them may be empty).- Returns:
- the required iterators.
-
loadSequential
Deprecated.- Throws:
IOException
-
loadSequential
@Deprecated public static ASCIIGraph loadSequential(CharSequence basename, ProgressLogger unused) throws IOExceptionDeprecated.- Throws:
IOException
-
loadOffline
- Throws:
IOException
-
loadOffline
public static ASCIIGraph loadOffline(CharSequence basename, ProgressLogger unused) throws IOException- Throws:
IOException
-
loadMapped
- Throws:
IOException
-
loadMapped
public static ASCIIGraph loadMapped(CharSequence basename, ProgressLogger unused) throws IOException- Throws:
IOException
-
loadOnce
- Throws:
IOException
-
load
- Throws:
IOException
-
load
- Throws:
IOException
-
store
public static void store(ImmutableGraph graph, CharSequence basename, ProgressLogger unused) throws IOException- Throws:
IOException
-
store
- Throws:
IOException
-
store
public static void store(ImmutableGraph graph, int shift, CharSequence basename) throws IOException- Throws:
IOException
-
main
public static void main(String[] args) throws IllegalArgumentException, SecurityException, IllegalAccessException, InvocationTargetException, NoSuchMethodException, IOException, JSAPException, ClassNotFoundException, InstantiationException
-