String url serializer
This commit is contained in:
parent
26b833310d
commit
e0f9c720da
@ -97,8 +97,10 @@ public class DiskCache implements URLsDiskHandler, URLsWriter {
|
||||
.then();
|
||||
}
|
||||
|
||||
private Send<Buffer> serializeUrl(URL url) {
|
||||
var urlSerializer = url.getSerializer();
|
||||
private <T extends URL> Send<Buffer> serializeUrl(T url) {
|
||||
@SuppressWarnings("unchecked")
|
||||
URLSerializer<T> urlSerializer = (URLSerializer<T>) url.getSerializer();
|
||||
|
||||
int sizeHint = urlSerializer.getSerializedSizeHint();
|
||||
if (sizeHint == -1) sizeHint = 64;
|
||||
try (var buffer = db.getAllocator().allocate(sizeHint)) {
|
||||
|
@ -23,7 +23,7 @@ import it.cavallium.dbengine.database.serialization.Serializer;
|
||||
|
||||
public interface URL {
|
||||
|
||||
Serializer<URL> getSerializer();
|
||||
URLSerializer<? extends URL> getSerializer();
|
||||
|
||||
/**
|
||||
* @return String representation of this URL
|
||||
|
39
src/main/java/org/warp/filesponge/URLSerializer.java
Normal file
39
src/main/java/org/warp/filesponge/URLSerializer.java
Normal file
@ -0,0 +1,39 @@
|
||||
/*
|
||||
* FileSponge
|
||||
* Copyright (C) 2021 Andrea Cavalli
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
package org.warp.filesponge;
|
||||
|
||||
import io.net5.buffer.api.Buffer;
|
||||
import io.net5.buffer.api.BufferAllocator;
|
||||
import it.cavallium.dbengine.database.serialization.BufferDataOutput;
|
||||
import it.cavallium.dbengine.database.serialization.SerializationException;
|
||||
import java.nio.charset.StandardCharsets;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
public interface URLSerializer<T extends URL> {
|
||||
|
||||
/**
|
||||
* @param output its writable size will be at least equal to the size hint
|
||||
*/
|
||||
void serialize(@NotNull T url, Buffer output) throws SerializationException;
|
||||
|
||||
/**
|
||||
* @return hint about the expected size of the buffer
|
||||
*/
|
||||
int getSerializedSizeHint();
|
||||
}
|
41
src/main/java/org/warp/filesponge/URLStringSerializer.java
Normal file
41
src/main/java/org/warp/filesponge/URLStringSerializer.java
Normal file
@ -0,0 +1,41 @@
|
||||
/*
|
||||
* FileSponge
|
||||
* Copyright (C) 2021 Andrea Cavalli
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
package org.warp.filesponge;
|
||||
|
||||
import io.net5.buffer.api.Buffer;
|
||||
import it.cavallium.dbengine.database.serialization.BufferDataOutput;
|
||||
import it.cavallium.dbengine.database.serialization.SerializationException;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
public abstract class URLStringSerializer<T extends URL> implements URLSerializer<T> {
|
||||
|
||||
@Override
|
||||
public final void serialize(@NotNull T url, Buffer output) throws SerializationException {
|
||||
var string = this.serialize(url);
|
||||
var dataOut = new BufferDataOutput(output);
|
||||
dataOut.writeUTF(string);
|
||||
}
|
||||
|
||||
public abstract @NotNull String serialize(@NotNull T url);
|
||||
|
||||
@Override
|
||||
public int getSerializedSizeHint() {
|
||||
return 64;
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user